在图形用户界面设计(GUI)过程中,我们经常会用到布局管理器,那么常用的布局管理器有哪些呢?它们又具有什么特征呢?
一、FlowLayout(流式布局)
1、特点:
a、流式布局会将组件按照顺序从左到右添加;
b、当一行排满后会自动换行。
2、构造方法:
FlowLayout( );
FlowLayout( int aligh );
FlowLayOut(int aligh,int hgap,int vgap);
其中,参数aligh决定组件在容器中的对其方式,可选的值为:
CENTER:居中对齐(默认方式);
LEFT:左对齐;
RIGHT:右对齐;
LEADING:与容器方向的开始边对齐;
TRAILING:与容器方向的结束边对齐;
参数hgap和vgap分别设定组件之间的水平和垂直间隙,默认值为5。
3、示例:
代码说明:流式布局,设置TRAILING对齐方式,每隔2秒添加一个按钮:
package com.Liao.SwingTest0820;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Flowlayout extends JFrame {
private static final long serialVersionUID = -4193345082031158245L;
public static void main(String[] args) {
new Flowlayout().init();
}
private void init() {
setSize(300, 200);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
//与容器结束边对齐,垂直和水平间隔20像素
setLayout(new FlowLayout(FlowLayout.TRAILING,20,20));
//调用添加按钮方法
addButton();
}
//添加按钮方法
private void addButton() {
for(int i=1;i<9;i++) {
try {
//每隔两秒添加一个按钮
Thread.sleep(2000);
JButton jbu=new JButton("按钮"+i);
add(jbu);
setVisible(true);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
4、效果图:
二、BorderLayout(边界布局)
1、特点:
a、边界布局将容器划分为五个区域,分别为东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER);
b、容器大小调整时,边界布局NORTH和SOUTH区域高度不变长度跟随变化,EAST和WEST长度不变高度跟随变化;
c、容器添加组件时,需调用add(Component comp,Object constraints)方法,constraints可选值为BorderLayout类的五个常数:EAST、WEST、SOUTH、NORTH、CENTER;
2、构造方法:
BorderLayout( );
BorderLayout(int hgap ,int vgap);
参数hgap和vgap分别设定组件之间的水平和垂直间隙,默认值为5像素。
3、示例:
package com.Liao.SwingTest0820;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Borderlayout extends JFrame {
private static final long serialVersionUID = -4193345082031158245L;
public static void main(String[] args) {
new Borderlayout().init();
}
private void init() {
setSize(300, 300);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
// 设置边界布局
setLayout(new BorderLayout());
// 添加按钮
add(new JButton("东"),BorderLayout.EAST);
add(new JButton("西"),BorderLayout.WEST);
add(new JButton("南"),BorderLayout.SOUTH);
add(new JButton("北"),BorderLayout.NORTH);
add(new JButton("中"),BorderLayout.CENTER);
setVisible(true);
}
}
4、效果图:
三、CardLayout(卡片布局)
1、特点:
a、卡片布局管理器将容器中的每个组件看作一张卡片,任何时候一次只能看到一张卡片,这张卡片占据整个容器;
b、卡片的顺序由组件对象本身在容器内部的顺序决定;
c、通过调用previous(Container parent),next(Container parent),show(Container parent,String name)方法来切换卡片。其中name参数可通过调用add(Component comp,Object constraints)方法来设定。
2、构造方法:
CardLayout( );
CardLayout(int hgap ,int vgap);
参数hgap和vgap分别设定组件之间的水平和垂直间隙,默认值为5像素。
3、示例:
package com.Liao.SwingTest0820;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CardLayoutTest extends JFrame implements ActionListener {
private static final long serialVersionUID = 6552368201238403917L;
private JButton jbu_next, jbu_pre,jbu_num;// 切换按钮
private JTextField jtf;
private CardLayout cl = new CardLayout();
private JPanel p = new JPanel();
public static void main(String[] args) {
new CardLayoutTest().init();
}
public void init() {
setSize(300, 200);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
// 卡片切换容器
JPanel cp = new JPanel();
add(cp, BorderLayout.SOUTH);
// 切换按钮
jbu_pre = new JButton("上一页");
jbu_pre.addActionListener(this);
jbu_next = new JButton("下一页");
jbu_next.addActionListener(this);
jbu_num=new JButton("跳转");
jbu_num.addActionListener(this);
jtf=new JTextField(2);
// 将按钮添加至容器中
cp.add(jbu_pre);
cp.add(jbu_next);
cp.add(jbu_num);
cp.add(jtf);
// 将卡片容器添加至中间区域
add(p, BorderLayout.CENTER);
// 设置卡片容器布局方式为卡片布局
p.setLayout(cl);
p.add(new JLabel("第一张卡片", JLabel.CENTER),"1");
p.add(new JLabel("第二张卡片", JLabel.CENTER),"2");
p.add(new JLabel("第三张卡片", JLabel.CENTER),"3");
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("上一页")) {
cl.previous(p);
}
if (str.equals("下一页")) {
cl.next(p);
}
if (str.equals("跳转")) {
cl.show(p,jtf.getText());
}
}
}
4、效果图:
四、GridLayout(网格布局)
1、特点:
a、网格布局将容器划分为n行m列大小相等的网格,一个网格只能放置一个组件,且各组件大小一样;
b、通过构造方法设定行数和列数为非零值时,指定的列数将被忽略,列数通过指定的行数和布局中的组件总数来确定;
c、网格布局添加组件的默认顺序为从左到右,从上到下;
2、构造方法:
GridLayout( );
GridLayout( int rows ,int cols );
GridLayOut(int rows , int cols,int hgap , int vgap);
参数rows和cols分别指定网格布局的行数和列数,参数hgap和vgap分别设定组件之间的水平和垂直间隙;
3、示例:
package com.Liao.SwingTest0820;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Gridlayout extends JFrame {
private static final long serialVersionUID = -4193345082031158245L;
public static void main(String[] args) {
new Gridlayout().init();
}
private void init() {
setSize(300, 300);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
// 设置网格布局
setLayout(new GridLayout(3,2));
// 添加按钮
addButton();
setVisible(true);
}
private void addButton() {
for(int i=1;i<9;i++) {
try {
//每隔两秒添加一个按钮
Thread.sleep(2000);
JButton jbu=new JButton("按钮"+i);
add(jbu);
setVisible(true);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
4、效果图:
好了,本篇就先介绍这四种布局管理器,下篇再做补充。