1. 布局: GridBagLayout

GridBagLayout,网格袋布局管理器。它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个 GridBagLayout 对象维持一个动态的矩形单元格(动态计算出单个单元格的大小),每个组件占用一个或多个的单元格,该单元格被称为 显示区域。每个组件显示区域按 从左到右,从上到下,依次排列。

2. 约束: GridBagConstraints

GridBagConstraints,封装了若干对组件的约束属性,每个由 GridBagLayout 管理的 组件都关联一个该约束实例,以指定 组件所在显示区域 的具体放置位置,以及 组件在其显示区域中 的对齐方式。

给组件添加约束: GridBagLayout.setConstraints(Component comp, GridBagConstraints c)

PS: 要理解 组件(所在)显示区域(一个或多个单元格组成) 和 组件在其显示区域中的对齐方式 这两个不同的概念。

3. 属性: GridBagConstraints 的属性

下面属性描述中的相关大写字母常量均定义在GridBagConstraints类中。

3.1 显示区域 约束属性

组件的显示区域相关约束属性,直接作用在组件所在显示区域上。

(1)gridx, gridy

组件显示区域 开始显示的位置(单元格坐标),容器左上角第一个单元格位置为 (0, 0),默认值为RELATIVE,表示放置在 “上一个组件”(所在行列最后添加的一个组件)的 “后面”。

(2)gridwidth, gridheight

组件显示区域 水平/竖直方向 所占单元格的个数,默认值为 1,如要占多行/列,需整体结果有足够的行/列。有如下两个常量特殊值可选:

REMAINDER: 占完所在行/列余下所有单元格(该值可实现 换行 作用);

RELATIVE: 占到所在行/列余下的倒数第二个单元格(使用该值,所在行/列的最后一个单元格需要“合理”安排组件,并手动换行)。

设置该值不能导致 “前面” 或 “后面” 单元格有留空白,否则可能无效。

(3)weightx, weighty

如何 分布额外空间(单元格区域外,容器边缘内 的间隔),当指定行/列中的其中 任意一个 组件的权重(大于0),则该行/列将(和其他行/列按权重比例)分配额外的水平/竖直空间。当权重为 0(默认值)时,则 整个单元格区域 居中于容器中心。

PS: 如果调用了java.awt.Window.pack()方法,该值无效,因为 pack 后已无额外的空间。

3.2 组件 约束属性

组件相关约束属性,直接作用在组件上。

(1)fill

当 显示区域 大小大于 组件 所需要的大小时,组件 在其 显示区域内 的填充方式。可能的值如下:

NONE: (默认)不调整组件大小;

HORIZONTAL: 加宽组件,使它在水平方向上填满其显示区域,但是不改变高度;

VERTICAL: 加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度;

BOTH: 使组件完全填满其显示区域。

(2)anchor

组件 在 显示区域内 的位置(对齐方式),可能有如下三种值:

绝对值

相对于方向的值

相对于基线的值

NORTH

PAGE_START

BASELINE

SOUTH

PAGE_END

BASELINE_LEADING

WEST

LINE_START

BASELINE_TRAILING

EAST

LINE_END

ABOVE_BASELINE

NORTHWEST

FIRST_LINE_START

ABOVE_BASELINE_LEADING

NORTHEAST

FIRST_LINE_END

ABOVE_BASELINE_TRAILING

SOUTHWEST

LAST_LINE_START

BELOW_BASELINE

SOUTHEAST

LAST_LINE_END

BELOW_BASELINE_LEADING

CENTER(默认值)

BELOW_BASELINE_TRAILING

(3)ipadx, ipady

组件的内部填充(可看做是 组件的内边距),即对组件最小大小的添加量。组件的宽度至少为其最小宽度/高度加上 ipadx/ipady 像素。

(4)insets

组件的外部填充(可看做是 组件的外边距,也可看做是 显示区域 的内边距),即 组件 与其 显示区域边缘 之间间距的最小量。

PS: 上面各属性值之间,以及其他因素,有可能存在冲突或不兼容,不一定设置了即有效,建议多做实验,多写测试Demo去尝试。

4. 案例: GridBagLayout使用实例

先展示效果,如下图所示:

各按钮约束参数:

Button01, Button02, Button03:默认

Button04:gridwidth = REMAINDER、fill = BOTH

Button05:gridwidth = REMAINDER、fill = BOTH

Button06:gridwidth = RELATIVE、fill = BOTH

Button07:gridwidth = REMAINDER

Button08:gridheight = 2、fill = BOTH

Button09:gridwidth = REMAINDER、fill = BOTH

Button10:gridwidth = REMAINDER、fill = BOTH

代码实现:

package com.xiets.swing;

import javax.swing.*;

import java.awt.*;

public class Main {

public static void main(String[] args) {

JFrame jf = new JFrame("测试窗口");

jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

GridBagLayout gridBag = new GridBagLayout(); // 布局管理器

GridBagConstraints c = null; // 约束

JPanel panel = new JPanel(gridBag);

JButton btn01 = new JButton("Button01");

JButton btn02 = new JButton("Button02");

JButton btn03 = new JButton("Button03");

JButton btn04 = new JButton("Button04");

JButton btn05 = new JButton("Button05");

JButton btn06 = new JButton("Button06");

JButton btn07 = new JButton("Button07");

JButton btn08 = new JButton("Button08");

JButton btn09 = new JButton("Button09");

JButton btn10 = new JButton("Button10");

/* 添加 组件 和 约束 到 布局管理器 */

// Button01

c = new GridBagConstraints();

gridBag.addLayoutComponent(btn01, c); // 内部使用的仅是 c 的副本

// Button02

c = new GridBagConstraints();

gridBag.addLayoutComponent(btn02, c);

// Button03

c = new GridBagConstraints();

gridBag.addLayoutComponent(btn03, c);

// Button04 显示区域占满当前行剩余空间(换行),组件填充显示区域

c = new GridBagConstraints();

c.gridwidth = GridBagConstraints.REMAINDER;

c.fill = GridBagConstraints.BOTH;

gridBag.addLayoutComponent(btn04, c);

// Button05 显示区域独占一行(换行),组件填充显示区域

c = new GridBagConstraints();

c.gridwidth = GridBagConstraints.REMAINDER;

c.fill = GridBagConstraints.BOTH;

gridBag.addLayoutComponent(btn05, c);

// Button06 显示区域占到当前尾倒车第二个单元格(下一个组件后需要手动换行),组件填充显示区域

c = new GridBagConstraints();

c.gridwidth = GridBagConstraints.RELATIVE;

c.fill = GridBagConstraints.BOTH;

gridBag.addLayoutComponent(btn06, c);

// Button07 放置在当前行最后一个单元格(换行)

c = new GridBagConstraints();

c.gridwidth = GridBagConstraints.REMAINDER;

gridBag.addLayoutComponent(btn07, c);

// Button08 显示区域占两列,组件填充显示区域

c = new GridBagConstraints();

c.gridheight = 2;

c.fill = GridBagConstraints.BOTH;

gridBag.addLayoutComponent(btn08, c);

// Button09 显示区域占满当前行剩余空间(换行),组件填充显示区域

c = new GridBagConstraints();

c.gridwidth = GridBagConstraints.REMAINDER;

c.fill = GridBagConstraints.BOTH;

gridBag.addLayoutComponent(btn09, c);

// Button10 显示区域占满当前行剩余空间(换行),组件填充显示区域

c = new GridBagConstraints();

c.gridwidth = GridBagConstraints.REMAINDER;

c.fill = GridBagConstraints.BOTH;

gridBag.addLayoutComponent(btn10, c);

/* 添加 组件 到 内容面板 */

panel.add(btn01);

panel.add(btn02);

panel.add(btn03);

panel.add(btn04);

panel.add(btn05);

panel.add(btn06);

panel.add(btn07);

panel.add(btn08);

panel.add(btn09);

panel.add(btn10);

jf.setContentPane(panel);

jf.pack();

jf.setLocationRelativeTo(null);

jf.setVisible(true);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

jpanel网格布局添加滚动条_Java Swing GridBagLayout网格袋布局的实现相关推荐

  1. java给界面添加滚动条_Java Swing学习笔记:要求会默写或熟练的,GUI,控件,设置列或行,加滚动条,新界面...

    GUI:Java的图形化用户界面 学习其控件的使用 JLabel(文本控件),JTextField(文本框),JPassworldField(密码框),JButton(普通按钮) JRadioButt ...

  2. [疯狂Java笔记]AWT:GridLayout网格布局、GridBagLayout网格袋布局

    1. GridLayout--网格布局: 1) 网格顾名思义就是纵横分割大小一样的格网,每个格子都是矩形的,且大小相等,每个格子只能存放一个组件: 2) 构造器:最大的特点就是必须指定格网是几行几列的 ...

  3. jpanel网格布局添加滚动条_jpanel 上下布局

    [解析] 本题考查Java中的布局管理器.FlowLayout是Pane和Applet默认的布局管理器,构件在容器中从上到下.从左到右进行放置,所以选项C为正确答案.BorderLayout是Wi.. ...

  4. jpanel网格布局添加滚动条_啥是前端开发工程师必会的5种网页布局方式?

    作为前端开发工程师,布局方式有多种,针对不同的情况有不一样的处理,但是很多初学的同学都不知道这些情况,那么我们今天就来说说,那些前端开发工程师不可不知的5种布局方式! 一.静态布局(static la ...

  5. java滚动条_java swing:文本框添加滚动条

    有几点要注意: 1.默认的滚动条,仅在输入的文本超过文本框时才会显示..没有超过文本框是不会显示的: 2.设置矩形大小,是在滚动条上设置,而不是在文本框上设置: 示例代码如下: public clas ...

  6. java swt 布局管理器_JAVA.SWT/JFace: SWT布局管理器

    7.1 布局管理器概述 FillLayout(充满式布局):在单行或单列中放置相同大小的控件,是最简单的布局. RowLayout(行列式布局):在单行或者多行中放置控件,应用了fill.wrap和s ...

  7. java jtextarea 滚动条_Java Swing JTextArea自动添加滚动条

    项目需要,现学一下. 默认没有WindowsBuilder Edit插件,需要从网上下一个:http://download.eclipse.org/windowbuilder/WB/integrati ...

  8. java卡片布局源码_Java编程使用卡片布局管理器示例【基于swing组件】

    本文实例讲述了Java编程使用卡片布局管理器.分享给大家供大家参考,具体如下: 运行效果: 完整示例代码: package com.han; import java.awt.BorderLayout; ...

  9. java组合框添加函数_Java Swing组合框选择并链接到其他组合框

    这是场景:我在数据库中有一个包含3列(id,name,age)的表.我创建了3个swing组合框和一个按钮,该按钮向数据库发送了一个" select语句",并用addItem(-) ...

最新文章

  1. 企业为什么要使用基于Docker的PaaS/CaaS平台
  2. 五. python的日历模块
  3. C++迪杰斯特拉算法求最短路径
  4. SQLite数据库管理工具(SQLiteStudio)v3.1.1
  5. Microsoft SQL Server学习(二)--数据库的语法
  6. 桌面开发者的界面故事,该醒醒了
  7. 【Linux】一步一步学Linux——sort命令(53)
  8. 使用c#操作IBM WebSphere MQ
  9. 二 面向对象三大特性
  10. python闭包的应用场景_简单谈谈Python中的闭包
  11. .Net程序员学习Linux最简单的方法
  12. poco mysql 安装_linux 下 POCO 安装
  13. QT连接MySQL数据库问题
  14. 紫光展锐发布系统级安全的高性能5G SoC移动平台T820
  15. 鸿蒙app前后端流程实现
  16. 计算数的位数c语言 百度作业帮,C语言多位数计算
  17. 用七段数码管显示学号python_用七段数码管显示学号python
  18. 《网络攻防》第七周学习总结
  19. 机器学习中的数据简介
  20. Message Bus - 消息总线

热门文章

  1. solid测序列原理_SOLID原理简介
  2. ios apple语音性别_如何使用Apple的CoreML和Vision API构建图像识别iOS应用
  3. linux 事实日志_Linux是25。是的! 让我们用有关Linux的25个令人震惊的事实来庆祝。
  4. 云服务器 存放 文件夹,云服务器 存放 文件夹
  5. error while loading shared libraries: libiconv.so.2: cannot open shared object file
  6. 用 Python 下载抖音无水印视频
  7. 昨晚停网后,我写了一段Python代码破解了隔壁小姐姐的wifi密码
  8. Redis简介与安装
  9. android客户端下载图片的方法
  10. Security Tutorials系列文章第七章:User-Based Authorization(上)