在Swing的实际开发中,开发人员在添加组件到容器中的时候可以自由调整组件的大小和在容器中的位置,这样虽然很灵活,但操作起来却很麻烦。为了加快开发速度,Java 提供了一些布局管理器,它们可以将组件进行统一管理,这样开发人员就不需要考虑组件是否会重叠等问题。今天我们就来学习和回顾一下Swing的几种布局管理器的布局方式,布局特点,各种布局方式的使用,并为每一种布局方式附上一个小例子,方便大家理解。

一、边界布局管理器:BorderLayout

BorderLayout(边框布局管理器)是 Window、JFrame 和 JDialog 的默认布局管理器。

边框布局管理器将窗口分为 5 个区域:North、South、East、West 和 Center。

  • 构造方法1: BorderLayout():创建一个 Border 布局,组件之间没有间隙。
  • 构造方法2: BorderLayout(int hgap,int vgap):创建一个 Border 布局,其中 hgap
    表示组件之间的横向间隔;vgap 表示组件之间的纵向间隔,单位是像素。


提示:边框布局管理器并不要求所有区域都必须有组件,如果四周的区域(North、South、East 和 West 区域)没有组件,则由 Center 区域去补充。如果单个区域中添加的不只一个组件,那么后来添加的组件将覆盖原来的组件,所以,区域中只显示最后添加的一个组件。

如图示例:注释了south之后,center就填满了south原来的位置

二、流式布局管理器:FlowLayout

FlowLayout(流式布局管理器)是 JPanel 和 JApplet 的默认布局管理器。它会将组件按照从上到下、从左到右的放置规律逐行进行定位。与其他布局管理器不同的是,流式布局管理器不限制它所管理组件的大小,而是允许它们有自己的最佳大小。

  • 构造方法1: FlowLayout():创建一个布局管理器,使用默认的居中对齐方式和默认 5 像素的水平和垂直间隔。
  • 构造方法2: FlowLayout(int align):创建一个布局管理器,使用默认 5 像素的水平和垂直间隔。其中,align
    表示组件的对齐方式,对齐的值必须是 FlowLayoutLEFT、FlowLayout.RIGHT 和
    FlowLayout.CENTER,指定组件在这一行的位置是居左对齐、居右对齐或居中对齐。
  • 构造方法3: FlowLayout(int align, int hgap,int vgap):创建一个布局管理器,其中 align
    表示组件的对齐方式;hgap 表示组件之间的横向间隔;vgap 表示组件之间的纵向间隔,单位是像素。


三、卡片布局管理器:CardLayout

CardLayout(卡片布局管理器)能够帮助用户实现多个成员共享同一个显示空间,并且一次只显示一个容器组件的内容
CardLayout 布局管理器将容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件。

  • 构造方法1: CardLayout():构造一个新布局,默认间隔为 0。

  • 构造方法2: CardLayout(int hgap, int
    vgap):创建布局管理器,并指定组件间的水平间隔(hgap)和垂直间隔(vgap)。

四、网格布局管理器:GridLayout

GridLayout(网格布局管理器)为组件的放置位置提供了更大的灵活性。它将区域分割成行数(rows)和列数(columns)的网格状布局,组件按照由左至右、由上而下的次序排列填充到各个单元格中。

  • 构造方法1: GridLayout(int rows,int
    cols):创建一个指定行(rows)和列(cols)的网格布局。布局中所有组件的大小一样,组件之间没有间隔。
  • 构造方法2: GridLayout(int rows,int cols,int hgap,int
    vgap):创建一个指定行(rows)和列(cols)的网格布局,并且可以指定组件之间横向(hgap)和纵向(vgap)的间隔,单位是像素。


五、网格包布局管理器:GirdBagLayout

GridBagLayout(网格包布局管理器)是在网格基础上提供复杂的布局,是最灵活、 最复杂的布局管理器。GridBagLayout 不需要组件的尺寸一致,允许组件扩展到多行多列。每个 GridBagLayout 对象都维护了一组动态的矩形网格单元,每个组件占一个或多个单元,所占有的网格单元称为组件的显示区域。

GridBagLayout 所管理的每个组件都与一个 GridBagConstraints 约束类的对象相关。这个约束类对象指定了组件的显示区域在网格中的位置,以及在其显示区域中应该如何摆放组件。除了组件的约束对象,GridBagLayout 还要考虑每个组件的最小和首选尺寸,以确定组件的大小。

为了有效地利用网格包布局管理器,在向容器中添加组件时,必须定制某些组件的相关约束对象。GridBagConstraints 对象的定制是通过下列变量实现的。

  1. gridx 和 gridy
    用来指定组件左上角在网格中的行和列。容器中最左边列的 gridx 为 0,最上边行的 gridy 为 0。这两个变量的默认值是 GridBagConstraints.RELATIVE,表示对应的组件将放在前一个组件的右边或下面。

  2. gridwidth 和 gridheight
    用来指定组件显示区域所占的列数和行数,以网格单元而不是像素为单位,默认值为 1。

  3. fill
    指定组件填充网格的方式,可以是如下值:GridBagConstraints.NONE(默认值)、GridBagConstraints.HORIZONTAL(组件横向充满显示区域,但是不改变组件高度)、GridBagConstraints.VERTICAL(组件纵向充满显示区域,但是不改变组件宽度)以及 GridBagConstraints.BOTH(组件横向、纵向充满其显示区域)。

  4. ipadx 和 ipady
    指定组件显示区域的内部填充,即在组件最小尺寸之外需要附加的像素数,默认值为 0。

  5. insets
    指定组件显示区域的外部填充,即组件与其显示区域边缘之间的空间,默认组件没有外部填充。

  6. anchor
    指定组件在显示区域中的摆放位置。可选值有 GridBagConstraints.CENTER(默认值)、GridBagConstraints.NORTH、GridBagConstraints.
    NORTHEAST、GridBagConstraints.EAST、GridBagConstraints.SOUTH、GridBagConstraints.SOUTHEAST、GridBagConstraints.WEST、GridBagConstraints.SOUTHWEST 以及 GridBagConstraints.NORTHWEST。

  7. weightx 和 weighty
    用来指定在容器大小改变时,增加或减少的空间如何在组件间分配,默认值为 0,即所有的组件将聚拢在容器的中心,多余的空间将放在容器边缘与网格单元之间。weightx 和 weighty 的取值一般在 0.0 与 1.0 之间,数值大表明组件所在的行或者列将获得更多的空间。

下面是一个例子:


六、盒式布局管理器:BoxLayout

BoxLayout(盒布局管理器)通常和 Box 容器联合使用,Box 类有以下两个静态方法。

  • createHorizontalBox():返回一个 Box 对象,它采用水平 BoxLayout,即 BoxLayout
    沿着水平方向放置组件,让组件在容器内从左到右排列。
  • createVerticalBox():返回一个 Box 对象,它采用垂直 BoxLayout,即 BoxLayout
    沿着垂直方向放置组件,让组件在容器内从上到下进行排列。

Java Swing的布局管理器相关推荐

  1. JAVA中GridBagLayout布局管理器应用详解

    很多情况下,我们已经不需要通过编写代码来实现一个应用程序的图形界面,而是通过强大的IDE工具通过拖拽辅以简单的事件处理代码即可很轻松的完成.但是我们不得不面对这样操作存在的一些问题,有时候我们希望能够 ...

  2. java group布局_Java 的swing.GroupLayout布局管理器的使用方法和实例

    GroupLayout 是一个 LayoutManager,它将组件按层次分组,以决定它们在 Container 中的位置.GroupLayout 主要供生成器使用,但也可以手工编码.分组由 Grou ...

  3. 博为峰Java技术文章 ——JavaSE Swing FlowLayout布局管理器I

    2019独角兽企业重金招聘Python工程师标准>>> 博为峰小博老师: 这种布局管理器的策略也非常简单,它是按照控件加入的先后顺序从左到右排列,一行排满了,再换下一行,然后在从左到 ...

  4. Java编程基础 - 布局管理器

    1. 布局管理器介绍 组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理. java共提供了五种布局管理器:流式布局管 ...

  5. Java中BorderLayout布局管理器的两种排列实现方式

    java中Frame类默认的布局管理器为BorderLayout,其主要是将Frame窗口分为东西南北中五个区域,每个区域仅限于放一个组件,如加入多个,前免得会被覆盖,解决方法为:可以在一个区域中加入 ...

  6. 【JAVA】-- Java五大常用布局管理器(BorderLayout、FlowLayout、GridLayout、GridBagLayout、CardLayout)

    在Swing组件中,有JFrame和JDialog这样的顶级容器(也叫窗口),顶级容器不能放置在其他容器中,可完成窗口大小化等基本功能. 也有JPanel这样的面板组件,比较复杂的布局,需要布局管理器 ...

  7. java group布局_Java的swing.GroupLayout布局管理器的使用方法和实例

    /** * @author :陶伟基 ,微博:http://weibo.com/taoandtao * @date :2012/12/10 * @place:广州大学华软软件学院 */ importj ...

  8. 以下关于java中布局管理说法错误的是_对于 Java 中的布局管理器,以下说法中错误的是( )。_2019复习答案_学小易找答案...

    [单选题]下列哪个酶与丙酮酸生成糖无关? [单选题]宋代( )的产地是当时的福建建安. [单选题]建筑平面图中,外部尺寸一般标注( )尺寸. [单选题]MCS - 51 单片机的 CPU 主要的组成部 ...

  9. java 网格包,求大神解答:JAVA网格包布局管理器小程序问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为什么我在这个程序上加入了一个Container对象就出问题了,求解答,要如何改: package A; import java.awt.*; impor ...

最新文章

  1. 《Adobe AIR权威指南》——《Flex 3权威指南》作者新作
  2. 3-3 面向对象 本章总结
  3. 在Castle中使用nhibernate
  4. WebRTC 音频发送和接收处理过程
  5. 自带容器_什么是衬胶容器罐以及质量标准?
  6. 海德堡大学 BMCV 组(Master/Diploma/Bachelor)研究机会,生物医学图像分析方向
  7. 计算机打印中 进纸盘2,软件、计算机和打印机接口问题-HP.PDF
  8. 使用 C-JDBC 给 Mysql 集群
  9. 《ELK Stack权威指南(第2版)》一3.5 Windows系统日志
  10. 子级Repeater获取 父级Repeater 中的值
  11. ROS中测试机器人里程计信息
  12. python调用dm.dll
  13. 文明与征服最全兵种克制关系介绍
  14. Lenovo Y50-70 1080p Hackintosh Catalina
  15. kernel下msm的版本信息
  16. Flink Table Api SQL 初体验,Blink的使用
  17. 运行JavaWeb项目报错Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  18. c语言中,关于延迟函数的理解
  19. 求解答 关于种子网站上的代码
  20. 【经典】思科、华为路由器交换机模拟器大全及教程

热门文章

  1. R语言计算累积平均值(Cumulative Average)、使用cumsum函数和seq_along函数计算data.frame指定数据列的累积平均值、并添加累积平均值数据列
  2. Java实现简单的P2P聊天软件
  3. Linux系统组成以及应用docker场景
  4. Office之EXCEL
  5. 如何设置本地安全策略
  6. 问道手游服务器维护集市时间,问道手游11月2日维护更新公告
  7. 从养狗到放弃要几天?
  8. python实现刷新个人博客访问量
  9. 数据结构-队列-数组队列
  10. Linux 内核console设备实现详解