创建GUI程序最重要的是界面布局。Swing采用两种布局方式:无布局管理器布局和基于布局管理器的布局。这里主要介绍基于布局管理器的布局。
基于布局管理器的布局首先通过调用容器类(JFrame、JPanel等)的setLayou()方法设置布局管理器(包括 Flowlayout、BorderLayout、GridLayout等)。设置好布局管理器后,容器内所有组件的布局就由布局管理器负责。
1、FlowLayout
界面采用FlowLayout布局,其GUI组件的放置规律是从左到右、从上到下。如果界面足够宽,组件从左到右依次排列。如果界面不够宽,则组件排到第一行的末尾后将继续在下一行的最左边开始排列。当容器的大小发生变化时,FlowLayout管理的组件的大小不会发生变化,但是相对位置会发生变化。
示例1:FlowLayout布局
public class Test extends JFrame {
public Test(){
JPanel jp=new JPanel();
setContentPane(jp);
//设置FlowLayout布局。默认也为FlowLayout。
setLayout(new FlowLayout());
JButton jb1=new JButton("第一个按钮");
JButton jb2=new JButton("第二个按钮");
JButton jb3=new JButton("第三个按钮");
JButton jb4=new JButton("第四个按钮");
jp.add(jb1);
jp.add(jb2);
jp.add(jb3);
jp.add(jb4);
//设置可见。大小位置、默认退出方式
setVisible(true);
setBounds(200, 200, 400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Test();
}
}
运运行结果如图。左边的是默认的运行界面,右面的是改变大小后的运行结果。可以看出当窗体的大小发生改变时,程序可以自行调整界面元素的位置布局。
2、BorderLayout
BorderLayout布局把界面分成5个区域:东、西、南、北、中。每个区域放置一个组件。当界面组件的大小发生变化时。组件的相对位置不变。大小发生变化。合理运用BorderLayout布局可以产生很多新的布局已满足不同程序的要求。
示例2:BorderLayout布局
public class Test extends JFrame {
public Test(){
JPanel jp=new JPanel();
setContentPane(jp);
//设置FlowLayout布局。默认也为FlowLayout。
setLayout(new BorderLayout());
JButton jb1=new JButton("东");
JButton jb2=new JButton("西");
JButton jb3=new JButton("南");
JButton jb4=new JButton("北");
JButton jb5=new JButton("中");
jp.add(jb1,BorderLayout.EAST);
jp.add(jb2,BorderLayout.WEST);
jp.add(jb3,BorderLayout.SOUTH);
jp.add(jb4,BorderLayout.NORTH);
jp.add(jb5,BorderLayout.CENTER);
//设置可见。大小位置、默认退出方式
setVisible(true);
setBounds(200, 200, 400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Test();
}
}
3.Gridlayout
Gridlayout布局将整额界面分成N行,M列的网格。每个网格的大小相等。布局时,按照组件加入的顺序优先考虑按行布局,当有一行满后在布局下一行。只有当行列不满足指定的数值时,才按行扩展。
示例3:Gridlayout
public class Test extends JFrame {
public Test(){
JPanel jp=new JPanel();
setContentPane(jp);
//设置FlowLayout布局。默认也为FlowLayout。
setLayout(new GridLayout(2,2));
JButton jb1=new JButton("第一个");
JButton jb2=new JButton("第二个");
JButton jb3=new JButton("第三个");
JButton jb4=new JButton("第四个");
//JButton jb5=new JButton("第五个");
jp.add(jb1);
jp.add(jb2);
jp.add(jb3);
jp.add(jb4);
//jp.add(jb5);
//设置可见。大小位置、默认退出方式
setVisible(true);
setBounds(200, 200, 400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Test();
}
}
结果如图所示。当放五个组件时,自动扩展成2行3列
转载于:https://blog.51cto.com/shaotao/1262429