Swing常用布局管理器对比介绍

2012-02-15 22:33:59|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, Swing, 界面设计|来源:唯设编程网

6、GridBagLayout:网袋布局

GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的。GridBagLayout同GridLayout一样,在容器中以网格形式来管理组件。但GridBagLayout功能要来得强大得多,主要体现在以下两方面:

1、GridBagLayout管理的所有行和列都可以是大小不同的;
2、GridLayout把每个组件限制到一个单元格,而GridBagLayout并不这样:组件在容器中可以占据任意大小的矩形区域。
 
GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints。其中有11个公有成员变量,GridBagConstraints可以从这11个方面来进行控制和操纵。这些内容是:

1、gridx—组件的横向坐标;
2、girdy—组件的纵向坐标;
3、gridwidth—组件的横向宽度,也就是指组件占用的列数;
4、gridheight—组件的纵向长度,也就是指组件占用的行数;
5、weightx—指行的权重,告诉布局管理器如何分配额外的水平空间;
6、weighty—指列的权重,告诉布局管理器如何分配额外的垂直空间;
7、anchor—当组件小于其显示区域时使用此字段;
8、fill—如果显示区域比组件的区域大的时候,可以用来控制组件的行为。控制组件是垂直填充,还是水平填充,或者两个方向一起填充;
9、insets—指组件与表格空间四周边缘的空白区域的大小;
10、ipadx— 组件间的横向间距,组件的宽度就是这个组件的最小宽度加上ipadx值;
11、ipady— 组件间的纵向间距,组件的高度就是这个组件的最小高度加上ipady值。

补充说明:

1、gridx,gridy:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列;
2、gridwidth,gridheight:默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间;
3、weightx,weighty:当窗口变大时,设置各组件跟着变大的比例。比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B;
4、anchor:当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。
5、insets:设置组件之间彼此的间距。它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。

效果:

内容面板代码:

   public static void addComponentsToPane(Container pane) {
       JButton button;
          pane.setLayout(new GridBagLayout());
          GridBagConstraints c = new GridBagConstraints();
       
          button = new JButton("Button 1");
          c.fill = GridBagConstraints.HORIZONTAL;
          c.gridx = 0;
          c.gridy = 0;
          pane.add(button, c);
       
          button = new JButton("Button 2");
          c.fill = GridBagConstraints.HORIZONTAL;
          c.weightx = 0.5;
          c.gridx = 1;
          c.gridy = 0;
          pane.add(button, c);
       
          button = new JButton("Button 3");
          c.fill = GridBagConstraints.HORIZONTAL;
          c.weightx = 0.5;
          c.gridx = 2;
          c.gridy = 0;
          pane.add(button, c);
       
          button = new JButton("Long-Named Button 4");
          c.fill = GridBagConstraints.HORIZONTAL;
          c.ipady = 40; // make this component tall
          c.weightx = 0.0;
          c.gridwidth = 3;
          c.gridx = 0;
          c.gridy = 1;
          pane.add(button, c);
       
          button = new JButton("5");
          c.fill = GridBagConstraints.HORIZONTAL;
          c.ipady = 0; // reset to default
          c.weighty = 1.0; // request any extra vertical space
          c.anchor = GridBagConstraints.PAGE_END; // bottom of space
          c.insets = new Insets(10, 0, 0, 0); // top padding
          c.gridx = 1; // aligned with button 2
          c.gridwidth = 2; // 2 columns wide
          c.gridy = 2; // third row
          pane.add(button, c);
   }

以上便是在实际Swing编程过程中经常遇到的布局模式,除此以外,还有其它功能强大,操作复杂的SpringLayout,由于使用较少,在这里不再赘述。如果用户在实际编程过程中需要对控件的位置进行精确定位,还可以将布局模式设为null,通过坐标控制实现。

发表评论0条 】
网友评论(共?条评论)..
Swing常用布局管理器对比介绍