教育路上
摘要:java布局管理GridBagLayout,GridBaglayou(網格包布局管理器) 是最靈活、最復雜的布局管理器。與 GridLayout 布局管理器類似,不同的是,它允許網格中的組件大小各不相同,而且允許一個組件跨越一個或者多個網格。。以下是我們為大家整理的,相信大家閱讀完后肯定有了自己的選擇吧。
2022-07-07 20:24網絡推薦
GridBaglayou(網格包布局管理器) 是最靈活、最復雜的布局管理器。與 GridLayout 布局管
理器類似,不同的是,它允許網格中的組件大小各不相同,而且允許一個組件跨越一個或者多個
網格。
使用 GridBaglLayout 布局管理器的步驟如下:
(1) 創建 GridBagLayout 布局管理器,,并使容器采用該布局管理器
GridBagLayout layout=new GridBagLayout();
container.setLayout(layout);
(2) 創建 GridBagContraints 對象(布局約束條件).并設置該對象的相關屬性
GridBagConstraints constraints=new GridBagConstraints();
constraints.gridx=1; //設置網格左上角橫向索引
constraints.gridy=1; //設置網格左上角縱向索引
constraints.gridwidth=1; //設置組件橫向跨越網格
constraints.gridheight=1; //設置組件縱向跨越網格
(3) 調用 GridBagLayout 對象的 setConstraints ()方法建立 GridBagConstraints 對象和受控
組件之間的關聯
Layout.setConstraints(component,constraints);
(4) 向容器中添加組件
container.add(conponent);
GridBagConstraints 對象可以重復使用,只需要改變它的屬性即可。如果要向容器
中添加多個組件,則重復(2).(3).(4)步驟。
從上面的步驟可以看出,使用 GridBagLayout 布局管理器的關鍵在于
GridBagConstraints 對象,它才是控制容器中每個組件布局的核心類,在
GridBagConstraints 中有很多表示約束的屬性,下面對 GridBagConstraints 類的一些常
用屬性進行介紹,如表 11-3 所示。
表 11-3 中,列出了 GridBagConstraints 的常用屬性,其中,gridx 和 gridy 用于設置
組件左上角所在網格的橫向和縱向索引,gridwidth 和 gridheight 用于設置組件橫向、縱
向跨越幾個網格,fill 用于設置是否及如何改變組件大小,weightx 和 weighty 用于設置
組件在容器中的水平方向和垂直方向的權重。
需要注意的是,如果希望組件的大小隨著容器的增大而增大,必須同時設置
GridBagConstraints 對象的 fill 屬性和 weightx.weighty 屬性。
接下來通過一個案例來演示 GridBagLayout 的用法,如例 11-11 所示。
例 11-11 Example11.java;’
import java.awt.*;
class Layout extends Frame {
public Layout(String title) {
GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
this.setLayout(layout);
c.fill = GridBagConstraints.BOTH; // 設置組件橫向縱向可以拉伸
c.weightx = 1; // 設置橫向權重為 1
c.weighty = 1; // 設置縱向權重為 1
this.addComponent("btn1", layout, c);
this.addComponent("btn2", layout, c);
this.addComponent("btn3", layout, c);
c.gridwidth = GridBagConstraints.REMAINDER; // 添加的組件是本行最后一個組件
this.addComponent("btn4", layout, c);
c.weightx = 0; // 設置橫向權重為 0
c.weighty = 0; // 設置縱向權重為 0
addComponent("btn5", layout, c);
c.gridwidth = 1; // 設置組件跨一個網格(默認值)
this.addComponent("btn6", layout, c);
c.gridwidth = GridBagConstraints.REMAINDER; // 添加的組件是本行最后一個組件
this.addComponent("btn7", layout, c);
c.gridheight = 2; // 設置組件縱向跨兩個網格
c.gridwidth = 1; // 設置組件橫向跨一個網格
c.weightx = 2; // 設置橫向權重為 2
c.weighty = 2; // 設置縱向權重為 2
this.addComponent("btn8", layout, c);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1;
this.addComponent("btn11", layout, c);
this.addComponent("btn10", layout, c);
this.pack();
this.setVisible(true);
}
// 增加組件的方法
private void addComponent(String name, GridBagLayout layout,
GridBagConstraints c) {
Button bt = new Button(name); // 創建一個名為 name 的按鈕
layout.setConstraints(bt, c); // 設置 GridBagConstraints 對象和按鈕的關聯
this.add(bt); // 增加按鈕
}
}
public class Example11 {
public static void main(String[] args) {
new Layout("GridBagLayout");
}
}
編譯運行程序,生成的窗口如圖 11-20 所示。
圖 11-20 例 11-11 運行結果
例 11-11 中,向 GridBagLayout 布局管理器中添加 10 個按鈕。由于每次添加組件的時候都
需要調用該布局的 setConstraints( )方法,將 GridBagConstraints 對象與按鈕組件相關聯,因此,可
以將這段關聯的代碼抽取到 addComponent( )方法當中,簡化書寫。
在添加 button1~ button4 按鈕和 button8~ button10 按鈕時,都將權重 weightx 和 weighty
的值設置為大于 0,因此在拉伸窗口時,這些按鈕都會隨著窗口增大,而在添加 button5~button7
按鈕時,將權重值設置為 0,這樣它們的高度在拉伸時沒有變化,但長度受上下組件的影響,還是
會隨窗口變大。
訪客的評論 2023/05/29 00:35
文中描述的是準確的嗎,如何報名!