Java,Swing用户界面中,使用GridBagLayout布局,可以灵活的放置组件和自定义其随窗口变化的适应性。
首先,如何使用GridBagLayout布局
GridBagLayout lay=new GridBagLayout(); GridBagConstraints c=new GridBagConstraints(); frame.setLayout(lay);//为frame设置布局管理器 //设置c的各项参数 lay.setConstraints(panel1, c);//放置组件
这样,我们调整c的各项参数,就可以将panel1放置在我们想放置的位置了。
常用参数的说明:
说明之前,对于GridBagLayout的布局界面,我们可以想象成一个个大小不一样的格子组成的网格(同一行的格子,一样高,但是不一定一样宽)
但是,仍然把每个格子的长和宽认为是1处理。
组件就被放在格子里面。
fill,组件在所处格子内的填充方式,NONE,VERTICAL,HORIZONTAL,BOTH(c.fill=GridBagConstraints.BOTH;)
anchor,组件在所处格子内的对齐方式,CENTER,NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST(同上)
ipadx,ipady:内部填充,是指在组件首选大小的基础上x方向上加上ipadx,y方向加上ipady,这样就可以保证组件不会收缩到ipadx,ipady所确定的大小以下(即确定组件大小)
insets,外部填充,填充的区域是组件与所处格子边框之间的部分,有left,top,right,bottom,四个参数(即内边框,c.insets=new Insets(10,10,10,10))
假设你fill参数设置为BOTH(这样下面的有些参数才有意义)
以所设置为GridBagLayout的组件的左上角为零点,x轴水平向右,y轴竖直向下
gridx,gridy:组件所处格子的左上角的坐标(一行二列:1,0)
gridwidth,gridheight:组件在x方向,y方向所占的单元格数(跨两行一列:1,2)
weighx,weighty:两种情况,
1.组件的大小小于格子时,组件需要覆盖这个格子时,weightx和weighty表示,水平和竖直扩展的比例
即,原本即使是正方形,当weightx和weighty不一致时,扩展后也将变成长方形
2.组件已经以一定比例的覆盖在格子上(可以由情况1实现,也可以由ipadx和ipady准确控制),我们拉伸窗口时,水平和竖直扩展的比例
注:取不一样的值,就可以看出效果
如果不是BOTH呢,其实就是weightx和weighty参数的调整,是否需要扩展需要具体考虑
为了简单,通常把这些参数设置,放在一个方法里面,然后调用。
我所遇见的问题:
格子之间存在覆盖,大小和比例不合适,可能会发现有的格子不见了
weighx和weighy参数不清楚具体原理,不过数值统一比较好,我是取1-10,然后慢慢改,再然后就成了...
可能因为组件被放置再一起的原因,许多时候,参数之间会互相影响(weightx和ipadx),这点需要考虑到
单一组件布局会考虑整体布局(设置了方向扩展),有时候,不是你想它在那,它就在那的,也并不是想留空白就留空白的,同样多改改就好。