在Swing中,每个组件在容器中都有一个具体的位置大小、而在容器中摆放各种组件时很难判断其具体位置和大小,使用布局管理器比程序员直接在容器中控制Swing组件的位置和大小方便得多,可以更加有效地处理整个窗体的布局。Swing提供的常用布局管理器有FlowLayout流布局管理器、BorderLayout边界布局管理器和GridLayout网格布局管理器,这些布局管理器位于java.awt包中。下面将对常用的布局管理器进行讲解。

FlowLayout流布局管理器

流布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像流一样从左到右摆放组件,直到占据了这一行的所有空间,然后在向下移动一行,默认情况下,组件在每一行都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。FlowLayout类中有以下常用的构造方法:

  • public FlowLayout()
  • public FlowLayout(int alignment)
  • public FlowLayout(int alignment,int horizGap,int vertGap)

构造方法中的alignment参数表示使用流布局管理器后组件在每一行的具体摆放位置,它可以被赋予FlowLayout.LEFT、FlowLayout.CENTER和FlowLayout.RIGHT这三个值中的任意一个,它们的详细说明见下表:

alignment参数 说明
FlowLayout.LEFT 在每一个行的组件将被指定为按照左对齐排列
FlowLayout.CENTER 在每一行的组件将被指定为按照居中对齐排列
FlowLayout.RIGHT 在每一行的组件将被指定为按照右对齐排列

在public FlowLayout(int alignment,int horizGap,int vertGap)构造方法中还存在horizGap与vertGap两个参数,这两个参数分别以像素为单位指定组件之间的水平间隔与垂直间隔

下面是一个使用流布局管理器的实例,代码如下:


import java.awt.Container;
import java.awt.FlowLayout;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;public class Demo extends JFrame {public Demo() {setTitle("本窗体使用流布局管理器"); // 设置窗体标题Container c = getContentPane();// 设置窗体使用流布局管理器,使组件右对齐,组件之间的水平间隔为10像素,垂直间隔10像素setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));for (int i = 0; i < 10; i++) { // 在容器中循环添加10个按钮c.add(new JButton("button" + i));}setSize(300, 200); // 设置窗体大小// 设置窗体关闭方式setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setVisible(true); // 设置窗体可见}public static void main(String[] args) {new Demo();}
}

返回结果:

                                     

从本实例可以看出,如果改变整个窗口大小,其中组件的摆放位置也会相应地发生变化,正好验证了使用流布局管理器时组件从左到右摆放的效果,当组件填满一行后,将自动换行直到所有的组件都摆放到容器为止,默认效果图是左边,手动改变窗体大小,如右图。

BorderLayout边界布局管理器

创建完窗体后,在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局,边界布局管理器可以将容器划分为东、南、西、北、中5个区域,如下图:

设计窗体时,可以将组件加入到边界布局管理器的5个区域中,另外,在调用Container类的add()方法向容器中添加组件时,可以设置此组件在边界布局管理器中的区域,区域的控制可以由BorderLayout类中的成员变量来决定,这些成员变量的具体含义如下表:

成员变量 含义
BorderLayout.NORTH 在容器中添加组建时,组件置于北部
BorderLayout.SOUTH 在容器中添加组建时,组件置于南部
BorderLayout.EAST 在容器中添加组建时,组件置于东部
BorderLayout.WEST 在容器中添加组建时,组件置于西部
BorderLayout.CENTER 在容器中添加组建时,组件置于中间区域开始填充,直到与其他组件边界连接

注意:如果使用了边界布局管理器,在向容器中添加组件时,如果不指定添加到那个区域,则默认添加到CENTER区域,如果向一个区域中添加多个组件,后放入的组件会覆盖先放入的组件。

下面是一个使用边界布局管理器的实例,代码如下:


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;public class Demo extends JFrame {public Demo() {setTitle("这个窗体使用边界布局管理器");Container c = getContentPane(); // 定义一个容器setLayout(new BorderLayout()); // 设置容器为边界布局管理器JButton centerBtn = new JButton("中"), northBtn = new JButton("北"), southBtn = new JButton("南"),westBtn = new JButton("西"), eastBtn = new JButton("东");c.add(centerBtn, BorderLayout.CENTER);// 中部添加按钮c.add(northBtn, BorderLayout.NORTH);// 北部添加按钮c.add(southBtn, BorderLayout.SOUTH);// 南部添加按钮c.add(westBtn, BorderLayout.WEST);// 西部添加按钮c.add(eastBtn, BorderLayout.EAST);// 东部添加按钮setSize(350, 200); // 设置窗体大小setVisible(true); // 设置窗体可见// 设置窗体关闭方式setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}public static void main(String[] args) {new Demo();}
}

返回结果:

GridLayout网格布局管理器

网格布局管理器将容器划分为网格,所以组件可以按行或列进行排列,在网格布局管理器中,每一个组件的大小都相同,并且网格的个数由网络的行数和列数决定,比如一个2行2列的网格能产生4个大小相等的网格,组件从网格的左上角开始,按照从左到右、从上到下的顺序加入到网格中,而且每一个组件都会填满整个网格,改变窗体的大小、组件的大小也会随之改变。

网格布局管理器主要有以下两个常用的构造方法:

  • public GridLayout(int rows,int columns)
  • public GridLayout(int rows,int columns,int horizGap,int vertGap)

在上述构造方法中,rows和columns参数代表网格的行数与列数,这两个参数只有一个参数可以为0,代表一行或一列可以排列任意多个组件,参数horizGap与vertGap指定网格之间的间距,其中horizGap参数指定网格之间的水平间距,vertGap参数指定网格之间的垂直间距。

下面来看一个在应该程序中使用网格布局管理器的实例,代码如下:


import java.awt.Container;
import java.awt.GridLayout;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;public class Demo extends JFrame {public Demo() {Container c = getContentPane();/** 设置容器使用网格布局管理器,设置7行3列的网格。* 组件间水平间距为5像素,垂直间距为5像素*/setLayout(new GridLayout(7, 3, 5, 5));for (int i = 0; i <= 20; i++) {c.add(new JButton("button" + i));       //循环添加按钮}setSize(300, 300);setTitle("这是一个使用网格布局管理器的窗体");setVisible(true);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new Demo();}
}

返回结果:

从上面实例可以看出,尝试改变窗体大小,将发现其中的组件大小也会发生相应的改变。

java常用布局管理器(流布局管理器、边界布局管理器、网格布局管理器)相关推荐

  1. HTML瀑布流布局实现网易LOFTER——masonry响应式网格布局库(非jQuery)

    HTML瀑布流布局--masonry响应式网格布局库(非jQuery) 瀑布流布局是流式布局的一种.是当下比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会 ...

  2. 【Java AWT 图形界面编程】LayoutManager 布局管理器 ④ ( GridLayout 网格布局 | GridBagLayout 网格包布局 )

    文章目录 一.GridLayout 网格布局 二.GridLayout 构造函数 三.GridLayout 网格布局代码示例 四.GridBagLayout 网格包布局 一.GridLayout 网格 ...

  3. 安卓学习笔记11:常用布局 - 网格布局

    文章目录 零.学习目标 一.网格布局概述 1.布局特点 2.继承关系图 3.常用属性 (1)针对布局的属性 (2)针对子控件的属性 二.案例演示--计算器界面 (一)运行效果 (二)涉及知识点 (三) ...

  4. 【Qt】Qt之网格布局

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 常用函数详解 04. Qt设计师使用网格布局 05. 使用代码实现网格布局 06. 附录 01. 概述 QGridLayo ...

  5. CSS Grid网格布局全攻略

    CSS Grid网格布局全攻略 所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直 ...

  6. html实现网格布局排版整齐的表格,CSS Grid 网格布局全攻略

    所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直在不断地推陈出新.其中网格布局( ...

  7. Android Studio:如何使用网格布局将整个界面等比分为三行三列

    刚开始接触android开发,还在摸索基础控件.老师说解决了一个问题就要记录下来以防以后遗忘,所以这里小小记录一下碰到的问题. 课本上的一道题目:怎么将界面等比分为三行三列,显示一个红色的" ...

  8. 轻松上手CSS Grid网格布局

    今天刚好要做一个好多div格子错落组成的布局,不是田字格,不是九宫格,12个格子这样子,看起来有点复杂.关键的是笔者有点懒,要写那么多div和css真是不想下手啊.多看了两眼,这布局不跟网格挺像吗?c ...

  9. 网格布局(grid layout)基础

    1 网格grid基础 Grid布局是一种二维网格布局,有行和列的概念,可用于布局页面主要的区域或小型组件. 1.1 使用display: grid定义网格布局 1.2 显式网格(explicit gr ...

  10. css基础知识十:介绍一下CSS中的Grid网格布局?

    一.是什么 Grid 布局即网格布局,是一个二维的布局方式,由纵横相交的两组网格线形成的框架性布局结构,能够同时处理行与列 擅长将一个页面划分为几个主要区域,以及定义这些区域的大小.位置.层次等关系 ...

最新文章

  1. Android Support library
  2. 【SQL Server学习笔记】SQL SERVER 视图
  3. 服务器无法执行该事务_分布式事务、MVCC、事务隔离级别
  4. LiveVideoStack线上分享第三季(十三):腾讯云LiteAVSDK演进之路
  5. 操作系统--用JavaScript实现银行家算法
  6. rubymine 调试 redmine
  7. Qt笔记-Linux程序控制台启动界面实例
  8. oracle exp调过坏块,无备份坏块处理(跳过方式)
  9. 找出消费者在使用你的产品的时候,什么时刻觉得“值了”
  10. Redis11-AOF持久化
  11. Raki的读paper小记:A Unified MRC Framework for Named Entity Recognition
  12. 华为交换机防MAC地址漂移原理和实验
  13. 2阶魔方矩阵matlab,matlab魔方矩阵
  14. xposed框架在分机安装失败_pokemon go 和 虚拟gps
  15. 在Excel中用VBA制作俄罗斯方块游戏
  16. python中match用法_js中match函数和g用法
  17. wps可以登录网页版_wps网页版入口_WPS个人免费版_点点游
  18. Linux中使用宝塔面板部署tipask3.*超详细教程,吐血两天部署成功,把过程整理出来,送给被官方文档折磨的小白们~~~~
  19. 计算两个向量的逆时针夹角
  20. 计算机毕业设计SSM超市商品管理系统【附源码数据库】

热门文章

  1. mysql中nullify_Core Data 数据库 No Action ,Nullify , Cascade , Deny 用法
  2. PCM(脉冲编码调制)的折叠码原理
  3. WPF Selector、SelectIndex、SelectedValue、SelectedValuePath、SelectedItem这几兄弟你分的清楚嘛?
  4. 全球计算机网络覆盖率,覆盖率
  5. windows上后台运行程序
  6. 字典的介绍及增删改查、常见操作
  7. 梦幻诛仙linux纯端架设教程,【梦幻诛仙】【双端手游】【最完美,最全的,视频架设教程】...
  8. python不允许使用关键字作为变量名_python函数变量_python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数 - 云+社区 - 腾讯云...
  9. Java网络编程与NIO详解13:epoll、poll、select面试题汇总
  10. 数码照片冲印尺寸对照表