Java中swing面板布局之GridBagLayout

发布于:2024-04-14 ⋅ 阅读:(50) ⋅ 点赞:(0)

GridBagLayout类是一个灵活的布局管理器,GridBagLayout类的对象维持一个动态的矩形单元网格,然后我们可以把组件放进一个或多个矩形单元网格,组件大就多放几个,组件小就少放几个。
具体每个组件放在的位置都是要使用GridBagConstraints类的对象来设置。

GridBagContraints类的成员变量列表如下:
1、gridx,gridy
指定组件放在哪个单元中。其值应该设为常数CridBagConstraints.RELATIVE。然后按标准顺序将组件加入网格包布局。从左到右,从上到下。

2、gridwidth,gridheight
指定组件将占用几行几列
s.gridwidth=1;//该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个

3、weightx,weighty
指定在一个GridBagLayout中应如何分配空间。缺省为0。
s.weightx = 0;//该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
s.weighty=0;//该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间

4、ipadx,ipady
指定组件的最小宽度和高度。可确保组件不会过分收缩。

5、insets
组件和显示区、外部填充

6、ipadx,ipady
组件和显示区、内部填充
7、fill
指定在单元大于组件的情况下,组件如何填充此单元,缺省为组件大小不变,以下为静态数据成员列表,它们是fill变量的值。
GridBagConstraints.NONE 不改变组件大小
GridBagConstraints.HORIZONTAL 增加组件宽度,使其水平填充显示区域
GridBagConstraints.VERTICAL 增加组件高度,使其垂直填充显示区域
GridBagConstraints.BOTH 使组件填充整个显示区域
实例:

public class TestGridBag {

    public static void main(String[] args) {
        	JFrame jf = new JFrame("测试窗口");
            jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            GridBagLayout gridBag = new GridBagLayout();    // 布局管理器
            GridBagConstraints c = null;                    // 约束
            JPanel panel = new JPanel(gridBag);
            JButton btn01 = new JButton("Button01");
            //将btn02、btn03按GridBagLayout放到JPanel中
            JButton btn02 = new JButton("Button02");
            JButton btn03 = new JButton("Button03");
            GridBagLayout igridBag = new GridBagLayout();    // 布局管理器
            GridBagConstraints ic = null;                    // 约束
            JPanel iPanel = new JPanel(igridBag);
            ic = new GridBagConstraints();
            ic.insets = new Insets(0, 10, 0, 10);
            igridBag.addLayoutComponent(btn02, ic);
            ic = new GridBagConstraints();
            ic.insets = new Insets(0, 10, 0, 10);
            igridBag.addLayoutComponent(btn02, ic);
            iPanel.add(btn02);
            iPanel.add(btn03);
            JTextField txt02 = new JTextField("TextField");
            JComboBox<String> cbx01 = new JComboBox<String>(new String[]{"选项A", "选项B", "选项C"});
            JComboBox<String> cbx02 = new JComboBox<String>(new String[]{"选项A", "选项B", "选项C"});

            /* 添加 组件 和 约束 到 布局管理器 */
            //btn01
            c = new GridBagConstraints();
            c.anchor = GridBagConstraints.WEST;
            c.insets = new Insets(2, 10, 2, 10);
            c.gridx = 0;
            c.gridy = 0;
            gridBag.addLayoutComponent(btn01, c);
            //btn02
            c = new GridBagConstraints();
            c.anchor = GridBagConstraints.EAST;
            c.insets = new Insets(2, 10, 2, 10);
            c.gridwidth = GridBagConstraints.REMAINDER;
            gridBag.addLayoutComponent(iPanel, c);
           
            //txt
            c = new GridBagConstraints();
            c.fill = GridBagConstraints.BOTH;
            c.insets = new Insets(2, 10, 2, 10);
            c.weightx = 1;
            c.weighty = 1;
            c.gridwidth = GridBagConstraints.REMAINDER;
            gridBag.addLayoutComponent(txt02, c);
       
            //cbx01
            c = new GridBagConstraints();
            c.anchor = GridBagConstraints.WEST;
            c.insets = new Insets(2, 10, 2, 10);
            gridBag.addLayoutComponent(cbx01, c);
            //cbx02
            c = new GridBagConstraints();
            c.anchor = GridBagConstraints.EAST;
            c.insets = new Insets(2, 10, 2, 10);
            c.gridwidth = GridBagConstraints.REMAINDER;
            gridBag.addLayoutComponent(cbx02, c);
            /* 添加 组件 到 内容面板 */
            panel.add(btn01);
            panel.add(iPanel);
            panel.add(txt02);
            panel.add(cbx01);
            panel.add(cbx02);
            jf.setContentPane(panel);
            jf.setSize(600, 400);
            jf.setLocationRelativeTo(null);
            jf.setVisible(true);
    }

}