GridBagLayout中有一个类叫作GridBagConstraints,这个类中的所有成员都是public的,GridBagLayout就是利用它来管理组件。 下面是GridBagConstraints中的公有成员变量
public int anchor 对齐方式。
public int fill 描述当容器变形时,控制组件是否增长。
public gridheight 描述了组件所占网格的个数,gridheight描述在纵向上所占网格的个数
Public gridwidth 描述在横向上所占网格的个数。
public girdx 描述组件在布局时应处于那个网格位置,即描述网格x轴开始的位置。
public gridy 同样是网格开始的位置,gridy为y轴上开始的位置。
public Insets insets 用来调整它周围的空间大小。 // insets(4,4,4,4) 上左下右 每个控件的这个距离是分享的。
public int ipadx 组件最小尺寸的约束条件。
public int ipady 组件最小尺寸的约束条件。
public double weightx 描述当容器变形时,单元格本身在x轴上(横向上)如何缩放。
public double weighty 描述当容器变形时,单元格本身在y轴上(纵向上)如何缩放。
GridBagConstraints的RELETIVE,和REMAINDER属性, 当把gridx值设置为GridBagConstriants.RELETIVE时,在一个控件添加时,将被放置在前一个控件的右侧.同理,对gridy 值设置为GridBagConstraints.RELETIVE时,在添加控件时,将被放置在前一个控件的下方,(这是一种根据前一个控件而决定当前组控件的相对放置方式)
我们在往container上添加控件时候可以写类似方法:
private void addComponet(Container cn, JComponent component,
GridBagConstraints gbc, int x, int y, int gridwidth, int gridheight,Insets a) {
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = gridwidth;
gbc.gridheight = gridheight;
gbc.insets = a ;
cn.add(component, gbc);
}
接下去要解决的一个问题是容器缩放时的行为.对于文本栏这个问题是最明显的,无论容器如何变形,它都保持同样的大小.文本区域应该总是跨越在容器的底部,但你肯定不希望在纵向缩放时,文本栏也纵向增长.
缩放的解决方法有两个,
1.调整 weightx和weighty,比如:
这两个属性都是浮点数值,描述了每个单元格在拉伸时横向或纵向等到的分配比例.
button one 0.4
button two 0.4
button three 0.6
text area 1.0
假设你把窗体横向拉伸了10个象素,则button one横向得到10*0.4 = 4个象素,他扩展的幅度也就是没有窗体拉伸的幅度大
button three得到了剩余的6个象素,也没有窗体拉伸的幅度大。
为了放置纵向拉伸时,文本框的纵向扩展,你可以把weighty设置为0,否则 你也可以设置weighty的值。
但是这种方法只是按照单元格比例缩放,如果要无限扩展的话,可以把这个值搞的很大,例如100,否则选用方法2.
2.可以设置fill值来代替weightx,weighty来控制缩放, 值有:
GridBagConstraints.NONE 不增长
GridBagConstraints.HORIZONTAL 只横向增长
GridBagConstraints.VERTICAL 只纵向增长
GridBagConstraints.BOTH 双向增长
layout中的setVgap
设置空间之间垂直距离或者是控件与container边缘的距离 值为与上边缘的距离 负值为与下边缘的距离
setVgap(0);