### GridBagLayout详解 在Java Swing中,`GridBagLayout`是一种非常强大的布局管理器,它允许组件在容器中自由地扩展、收缩以及占据多个格子。与`GridLayout`不同的是,`GridBagLayout`提供了更为灵活的布局方式,使得开发者能够更精细地控制每个组件的位置和大小。 #### GridBagLayout基本概念 `GridBagLayout`将容器划分为一个网格,每个格子可以容纳一个组件。通过`GridBagConstraints`类来控制组件在网格中的位置和大小,包括占据多少个格子、是否填充整个格子等属性。 #### 示例代码解析 下面我们将基于给定的示例代码,详细解析如何使用`GridBagLayout`: ```java public class Container extends JFrame { public Container() { GridBagLayout grid = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setFont(new Font("宋体", Font.BOLD, 20)); setLayout(grid); setSize(400, 300); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; c.weighty = 1.0; makebutton("b1", grid, c); makebutton("b2", grid, c); makebutton("b3", grid, c); c.gridwidth = c.REMAINDER; makebutton("b4", grid, c); this.setVisible(true); c.weightx = 0.0; makebutton("b5", grid, c); c.gridwidth = c.RELATIVE; makebutton("b6", grid, c); // c.weightx = 1.0; c.gridwidth = c.REMAINDER; makebutton("b7", grid, c); c.weightx = 1.0; c.weighty = 1.0; c.gridwidth = 1; c.gridheight = 2; makebutton("b8", grid, c); c.gridwidth = c.REMAINDER; // c.gridwidth = c.RELATIVE; c.gridheight = 1; makebutton("b9", grid, c); makebutton("b10", grid, c); } private void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) { JButton button = new JButton(name); gridbag.setConstraints(button, c); add(button); } public static void main(String args[]) { Container ee = new Container(); } } ``` #### 代码解析 1. **初始化GridBagLayout**: ```java GridBagLayout grid = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); ``` 这里创建了`GridBagLayout`实例,并初始化`GridBagConstraints`对象,用于设置布局约束。 2. **设置窗口属性**: ```java setFont(new Font("宋体", Font.BOLD, 20)); setLayout(grid); setSize(400, 300); ``` 设置字体样式、布局管理器以及窗口大小。 3. **设置按钮位置和大小**: ```java c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; c.weighty = 1.0; makebutton("b1", grid, c); ... c.gridwidth = c.REMAINDER; makebutton("b4", grid, c); ... c.weightx = 0.0; makebutton("b5", grid, c); ... c.gridwidth = c.RELATIVE; makebutton("b6", grid, c); ... c.gridwidth = c.REMAINDER; makebutton("b7", grid, c); ... c.gridwidth = 1; c.gridheight = 2; makebutton("b8", grid, c); ... c.gridheight = 1; makebutton("b9", grid, c); makebutton("b10", grid, c); ``` - `c.fill = GridBagConstraints.BOTH;`:设置按钮填充其所在单元格的宽度和高度。 - `c.weightx = 1.0;` 和 `c.weighty = 1.0;`:设置按钮可以根据容器的大小变化而调整自身大小。 - `c.gridwidth` 和 `c.gridheight`:分别设置按钮占据的列数和行数。 - `c.REMAINDER`:表示按钮将占据剩余的所有列。 - `c.RELATIVE`:按钮将占据当前列的下一个位置,如果当前行已满,则转到下一行的起始位置。 - 数值(如`1`):表示占据的具体列数或行数。 4. **添加按钮至窗口**: ```java private void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) { JButton button = new JButton(name); gridbag.setConstraints(button, c); add(button); } ``` 该方法创建按钮,并将其添加到窗口中。 5. **显示窗口**: ```java this.setVisible(true); ``` 使窗口可见。 #### 总结 通过上述示例代码,我们可以看到`GridBagLayout`的强大之处在于它可以灵活地控制每个组件的位置和大小,实现复杂的界面布局效果。通过合理设置`GridBagConstraints`对象的属性,可以轻松实现多种布局需求。这对于需要精细控制界面布局的应用来说是非常有用的。
























- 金麦爸2014-02-21谢谢分享,作用不大。

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 《安装工程预算常用定额项目对照图示》.pdf
- XX业主施工阶段的项目管理.doc
- ASP个人网站发设计方案实现.doc
- 监理工作总结cc.doc
- 观课评教的类型、标准.ppt
- plc和变频器大学本科方案设计书(wo).doc
- XW万能铣床电控系统的PLC设计.doc
- 15-2质量改进程序附表.doc
- 虚拟化技术在医院信息化建设中的实施.docx
- 幼儿园中班语言说课稿:快乐的果园.doc
- 第四章-砌筑工程[1].ppt
- 大学设计单片机-SMS技术智能家居.doc
- 关于通信技术与计算机技术融合发展探究.docx
- 基于区块链技术的电子证据平台应用研究.docx
- 浅议互联网大数据时代技工院校学生思政教育工作的创新.docx
- 中秋活动领导致辞.docx


