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),這點需要考慮到
單一組件布局會考慮整體布局(設置了方向擴展),有時候,不是你想它在那,它就在那的,也並不是想留空白就留空白的,同樣多改改就好。