教育路上
摘要: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/06/06 08:18
文中描述的是准确的吗,如何报名!