java -- GUI程序设计之基于布局管理器的布局

    创建GUI程序最重要的是界面布局。Swing采用两种布局方式:无布局管理器布局和基于布局管理器的布局。这里主要介绍基于布局管理器的布局。

    基于布局管理器的布局首先通过调用容器类(JFrameJPanel等)的setLayou()方法设置布局管理器(包括 FlowlayoutBorderLayoutGridLayout等)。设置好布局管理器后,容器内所有组件的布局就由布局管理器负责。

1FlowLayout

界面采用FlowLayout布局,其GUI组件的放置规律是从左到右、从上到下。如果界面足够宽,组件从左到右依次排列。如果界面不够宽,则组件排到第一行的末尾后将继续在下一行的最左边开始排列。当容器的大小发生变化时,FlowLayout管理的组件的大小不会发生变化,但是相对位置会发生变化。

示例1FlowLayout布局

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布局可以产生很多新的布局已满足不同程序的要求。

示例2BorderLayout布局

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列的网格。每个网格的大小相等。布局时,按照组件加入的顺序优先考虑按行布局,当有一行满后在布局下一行。只有当行列不满足指定的数值时,才按行扩展。

示例3Gridlayout

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列

你可能感兴趣的:(java -- GUI程序设计之基于布局管理器的布局)