目录

为了容器组件实现与平台无关的自动合理排序,swing采用了布局管理器来管理组件的排放、位置、大小等布置任务。
NORTH、WEST、EAST、等被定义为静态常量,可以直接引用

边框布局管理器(BorderLayout)

主要是两个语句
JFrame jf = new JFrame(“测试程序”);
jf.setLayout(new BorderLayout());
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());

通过控件的add方法来添加的
add(组件名称,方位)

javaswing 布局管理器_布局管理器

package GuiLayout;

import javax.swing.*;
import java.awt.*;

public class BorderLayoutDemo {

static final int WIDTH=300;
static final int HEIGHT=200;
public static void main(String[] args) {
JFrame jf = new JFrame("测试程序");

jf.setSize(WIDTH,HEIGHT);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
JPanel contentPane = new JPanel(); //创建一个中间容器
jf.setContentPane(contentPane); //添加中间容器

/**
* 1,先写基本的内容,比如:JFrame框架,设置大小,关闭方式,设置可见,
* 2,是否需要创建中间容器
* 3,将中间容器添加到顶层容器中
* 4,开始写组件,需要用到的组件
* 5,创建布局管理器
* 6, 将其设置为需要的布局管理器
* 7,将组件添加到中间容器中
*/

// jf.setLayout(new BorderLayout()); 书上写的是将顶层容器设置为边框布局
contentPane.setLayout(new BorderLayout()); //然后我将中间容器设置为中间布局,结果是一样的

JButton b1 = new JButton("工作");
JButton b2 = new JButton("生活");
JButton b3 = new JButton("上班");
JButton b4 = new JButton("购物");
JButton b5 = new JButton("饮食");

contentPane.add(b1,"North");
contentPane.add(b2,"South");
contentPane.add(b3,"East");
contentPane.add(b4,"West");
contentPane.add(b5,"Center");



}
}

例子2:

边框布局管理器 嵌套 边框布局管理器

javaswing 布局管理器_java_02

package GuiLayout;

import javax.swing.*;
import java.awt.*;
//展示如何使用BorderLayout布局管理器将组件进行布局

/**
* 1,先写基本的内容,比如:JFrame框架,设置大小,关闭方式,设置可见,
* 2,是否需要创建中间容器
* 3,将中间容器添加到顶层容器中
* 4,开始写组件,需要用到的组件
* 5,创建布局管理器
* 6, 将其设置为需要的布局管理器
* 7,将组件添加到中间容器中
*/
public class BorderLayoutDemo1 {
static final int WIDTH=300;
static final int HEIGHT=200;
public static void main(String[] args) {

JFrame jf = new JFrame("测试程序");
jf.setSize(WIDTH,HEIGHT);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
//创建一个中间容器,
JPanel contentPane = new JPanel(); //这是一个总的中间容器
//添加中间容器
jf.setContentPane(contentPane);


//创建25个普通按钮组件
JButton b1 = new JButton("人民币");
JButton b2 = new JButton("美元");
JButton b3 = new JButton("日元");
JButton b4 = new JButton("欧元");
JButton b5 = new JButton("英镑");

JButton c1 = new JButton("白菜");
JButton c2 = new JButton("胡萝卜");
JButton c3 = new JButton("青菜");
JButton c4 = new JButton("西红柿");
JButton c5 = new JButton("土豆");

JButton d1 = new JButton("铅笔");
JButton d2 = new JButton("钢笔");
JButton d3 = new JButton("水笔");
JButton d4 = new JButton("黑笔");
JButton d5 = new JButton("彩笔");

JButton e1 = new JButton("键盘");
JButton e2 = new JButton("鼠标");
JButton e3 = new JButton("主机");
JButton e4 = new JButton("电脑");
JButton e5 = new JButton("硬盘");

JButton f1 = new JButton("冰红茶");
JButton f2 = new JButton("饮料");
JButton f3 = new JButton("果茶");
JButton f4 = new JButton("奶茶");
JButton f5 = new JButton("蜜雪冰城");

// BorderLayout lay = new BorderLayout();
// //创建一个布局管理器对象,将中间容器设置为此布局管理器
// jf.setLayout(lay);


jf.setLayout(new BorderLayout()); //布局管理器设置为BorderLayout方式
//再创建5个中间容器
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p5 = new JPanel();
//将这5个小容器设置为BorderLayout布局管理器格式
p1.setLayout(new BorderLayout());
p2.setLayout(new BorderLayout());
p3.setLayout(new BorderLayout());
p4.setLayout(new BorderLayout());
p5.setLayout(new BorderLayout());

//将5个中间容器再放到另一个中间容器中
contentPane.add(p1,"North");
contentPane.add(p2,"South");
contentPane.add(p3,"East");
contentPane.add(p4,"West");
contentPane.add(p5,"Center");


p1.add(b1,"North");
//将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
p1.add(b2,"South");
p1.add(b3,"East");
p1.add(b4,"West");
p1.add(b5,"Center");

p2.add(c1,"North");
//将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
p2.add(c2,"South");
p2.add(c3,"East");
p2.add(c4,"West");
p2.add(c5,"Center");

p3.add(d1,"North");
//将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
p3.add(d2,"South");
p3.add(d3,"East");
p3.add(d4,"West");
p3.add(d5,"Center");

p4.add(e1,"North");
//将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
p4.add(e2,"South");
p4.add(e3,"East");
p4.add(e4,"West");
p4.add(e5,"Center");

p5.add(f1,"North");
//将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
p5.add(f2,"South");
p5.add(f3,"East");
p5.add(f4,"West");
p5.add(f5,"Center");
}
}

BoxLayout箱式布局管理器

swing 提供的box类就是箱式布局类,他的默认布局管理器就是boxlayout,在箱式布局管理器中包括两种箱子,一种是水平箱,另外一种是垂直箱子
箱式布局组件之间没有空隙,那么就要通过填充物组件来提供空隙,
箱式布局管理器提供了3种填充物,支柱、固定区、弹簧。

箱式布局管理器和网格布局管理器相似,前者为箱子,后者为网格形式。

javaswing 布局管理器_java_03

package GuiLayout;

import javax.swing.*;
import java.awt.*;
/**
* 1,先写基本的内容,比如:JFrame框架,设置大小,关闭方式,设置可见,
* 2,是否需要创建中间容器
* 3,将中间容器添加到顶层容器中
* 4,开始写组件,需要用到的组件
* 5,创建布局管理器
* 6, 将其设置为需要的布局管理器
* 7,将组件添加到中间容器中
*/
public class BoxLayoutDemo1 extends JFrame {
private static final int WIDTH=400;
private static final int HEIGHT=300;

public BoxLayoutDemo1(){
setTitle("测试箱式布局管理器");
setSize(WIDTH,HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

Container con = getContentPane(); //创建一个中间容器,因为是继承,所以不需要写,额外的东西
JLabel label1=new JLabel("姓名");
JTextField textField1 = new JTextField(10);
textField1.setMaximumSize(textField1.getPreferredSize());

Box hbox1 = Box.createHorizontalBox(); //创建一个水平箱子
hbox1.add(label1);
//在水平箱子上添加一个标签组件,并且创建一个不可见的20个单位的组件
//在这之后再添加一个文本框组件
hbox1.add(Box.createHorizontalStrut(10));
hbox1.add(textField1);

JLabel label2 = new JLabel("密码");
JTextField textField2= new JTextField(10);
textField2.setMaximumSize(textField2.getPreferredSize());
Box hbox2=Box.createHorizontalBox(); //创建一个水平箱子
hbox2.add(label2);

//在水平箱子上添加一个标签组件,并创建一个不可见的20个单位的组件
//在这之后添加文本框组件
hbox2.add(Box.createHorizontalStrut(10));
hbox2.add(textField2);

//创建两个普通按钮,并创建一个水平箱子,并将两个按钮放置到一个普通箱子中
JButton button1=new JButton("确定");
JButton button2=new JButton("取消");
Box hbox3=Box.createHorizontalBox();
hbox3.add(button1);
hbox3.add(button2);

hbox3.add(Box.createHorizontalStrut(10)); //这个填充物是我自己加的

//创建一个垂直盒子,并将两个水平盒子添加到其中,并创建一个横向的glue组件
Box vbox = Box.createVerticalBox();
vbox.add(hbox1);
vbox.add(hbox2);
vbox.add(Box.createVerticalGlue());

vbox.add(hbox3);
//将垂直盒子添加到BorderLayout布局管理器中的中间位置
con.add(vbox,BorderLayout.CENTER);
}

public static void main(String[] args) {
new BoxLayoutDemo1();
}

}

FlowLayout流式布局管理器

这种布局管理器的策略也很简单,按照控件加入的先后顺序,从左向右排列,一行排满了,再换下一行,然后继续从左到右排列。每一行的组件都是居中排列的。
FlowLayout布局管理器同样是通过先创建对象、再利用其内置方法和变量来布局的组件。

import javax.swing.*;
import java.awt.*;

public class FlowLayoutDemo {
public static void main(String[] agrs) {
JFrame jFrame=new JFrame("FlowLayoutDemo"); //创建Frame窗口

JPanel jPanel=new JPanel(); //创建面板
JButton btn1=new JButton("1"); //创建按钮
JButton btn2=new JButton("2");
JButton btn3=new JButton("3");
JButton btn4=new JButton("4");
JButton btn5=new JButton("5");
JButton btn6=new JButton("6");
JButton btn7=new JButton("7");
JButton btn8=new JButton("8");
JButton btn9=new JButton("9");

jPanel.add(btn1); //面板中添加按钮
jPanel.add(btn2);
jPanel.add(btn3);
jPanel.add(btn4);
jPanel.add(btn5);
jPanel.add(btn6);
jPanel.add(btn7);
jPanel.add(btn8);
jPanel.add(btn9);

//向JPanel添加FlowLayout布局管理器,将组件间的横向和纵向间隙都设置为20像素
jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));
jPanel.setBackground(Color.gray); //设置背景色
jFrame.add(jPanel); //添加面板到容器
jFrame.setBounds(300,200,300,150); //设置容器的大小
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

javaswing 布局管理器_布局管理器_04