GridBagLayout布局

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),这点需要考虑到

单一组件布局会考虑整体布局(设置了方向扩展),有时候,不是你想它在那,它就在那的,也并不是想留空白就留空白的,同样多改改就好。

posted @ 2017-04-01 19:30  柠檬水请加冰  阅读(2016)  评论(0编辑  收藏  举报