GridBagLayout功能强大但是有点复杂,我想从使用它所要达到的效果的角度加以思考,然后和CSS框模型比较, 我发现会更容易理解其各个配置属性的意义。下面是一些很好的链接:
css框模型:http://www.w3school.com.cn/css/css_boxmodel.asp
GridBag:http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
很好的GridBag帖子:http://blog.csdn.net/piaopiaopiaopiaopiao/article/details/14164499
属性gridx,gridy,gridwidth, gridheight,fill很容易理解,这里不讨论。
=========================
先介绍weightx,weighty
UI界面由矩形单元网格组成,每个组件占用一个或多个这样的单元。那么当整个界面放大时,每个单元格该如何变动呢?GridBag支持三类方案,这是通过配置weightx,weighty实现的:
1.单元格大小不变,对应的weightx,weighty值都为0,即默认值。
2.单元格同比例放大,对应的weightx,weighty值都为相同的非0值。
3.单元格的放大与否可以设定,此时weight值不能全为0.weight值为0的单元格固定大小。非0的单元格放大。
其实weight非0时,也会影响放大的比例。比如添加按钮2时c.weightx=0.8,而在添加按钮3时c.weightx=0.2,这就会导致放大时按钮2所占区域的宽大约是按钮3所占区域的宽的0.8/0.2=4倍
(更准确地讲,只要最初图像够大,按钮2所占区域的宽已经是按钮3所占区域的宽的4倍,所以weight可以影响单元格的大小)
==========================
接下来介绍ipadx,ipady,insets,anchor
当fill为NONE时,可能出现组件比其所在单元格小的情况。这类似于CSS框模型的情况,ipadx,ipady类似于padding(差别之处在于padding是填空白,ipad使组件变大),insets类似于margin,而border对应物为Border,一般用不到。
而anchor使得我们可以确定将组件置于单元格的哪个方位,这类似于CSS设定margin-top,margin-right等配置。
===========================