java常用布局管理器(流布局管理器、边界布局管理器、网格布局管理器)
在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常用布局管理器(流布局管理器、边界布局管理器、网格布局管理器)相关推荐
- HTML瀑布流布局实现网易LOFTER——masonry响应式网格布局库(非jQuery)
HTML瀑布流布局--masonry响应式网格布局库(非jQuery) 瀑布流布局是流式布局的一种.是当下比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会 ...
- 【Java AWT 图形界面编程】LayoutManager 布局管理器 ④ ( GridLayout 网格布局 | GridBagLayout 网格包布局 )
文章目录 一.GridLayout 网格布局 二.GridLayout 构造函数 三.GridLayout 网格布局代码示例 四.GridBagLayout 网格包布局 一.GridLayout 网格 ...
- 安卓学习笔记11:常用布局 - 网格布局
文章目录 零.学习目标 一.网格布局概述 1.布局特点 2.继承关系图 3.常用属性 (1)针对布局的属性 (2)针对子控件的属性 二.案例演示--计算器界面 (一)运行效果 (二)涉及知识点 (三) ...
- 【Qt】Qt之网格布局
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 常用函数详解 04. Qt设计师使用网格布局 05. 使用代码实现网格布局 06. 附录 01. 概述 QGridLayo ...
- CSS Grid网格布局全攻略
CSS Grid网格布局全攻略 所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直 ...
- html实现网格布局排版整齐的表格,CSS Grid 网格布局全攻略
所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直在不断地推陈出新.其中网格布局( ...
- Android Studio:如何使用网格布局将整个界面等比分为三行三列
刚开始接触android开发,还在摸索基础控件.老师说解决了一个问题就要记录下来以防以后遗忘,所以这里小小记录一下碰到的问题. 课本上的一道题目:怎么将界面等比分为三行三列,显示一个红色的" ...
- 轻松上手CSS Grid网格布局
今天刚好要做一个好多div格子错落组成的布局,不是田字格,不是九宫格,12个格子这样子,看起来有点复杂.关键的是笔者有点懒,要写那么多div和css真是不想下手啊.多看了两眼,这布局不跟网格挺像吗?c ...
- 网格布局(grid layout)基础
1 网格grid基础 Grid布局是一种二维网格布局,有行和列的概念,可用于布局页面主要的区域或小型组件. 1.1 使用display: grid定义网格布局 1.2 显式网格(explicit gr ...
- css基础知识十:介绍一下CSS中的Grid网格布局?
一.是什么 Grid 布局即网格布局,是一个二维的布局方式,由纵横相交的两组网格线形成的框架性布局结构,能够同时处理行与列 擅长将一个页面划分为几个主要区域,以及定义这些区域的大小.位置.层次等关系 ...
最新文章
- Android Support library
- 【SQL Server学习笔记】SQL SERVER 视图
- 服务器无法执行该事务_分布式事务、MVCC、事务隔离级别
- LiveVideoStack线上分享第三季(十三):腾讯云LiteAVSDK演进之路
- 操作系统--用JavaScript实现银行家算法
- rubymine 调试 redmine
- Qt笔记-Linux程序控制台启动界面实例
- oracle exp调过坏块,无备份坏块处理(跳过方式)
- 找出消费者在使用你的产品的时候,什么时刻觉得“值了”
- Redis11-AOF持久化
- Raki的读paper小记:A Unified MRC Framework for Named Entity Recognition
- 华为交换机防MAC地址漂移原理和实验
- 2阶魔方矩阵matlab,matlab魔方矩阵
- xposed框架在分机安装失败_pokemon go 和 虚拟gps
- 在Excel中用VBA制作俄罗斯方块游戏
- python中match用法_js中match函数和g用法
- wps可以登录网页版_wps网页版入口_WPS个人免费版_点点游
- Linux中使用宝塔面板部署tipask3.*超详细教程,吐血两天部署成功,把过程整理出来,送给被官方文档折磨的小白们~~~~
- 计算两个向量的逆时针夹角
- 计算机毕业设计SSM超市商品管理系统【附源码数据库】
热门文章
- mysql中nullify_Core Data 数据库 No Action ,Nullify , Cascade , Deny 用法
- PCM(脉冲编码调制)的折叠码原理
- WPF Selector、SelectIndex、SelectedValue、SelectedValuePath、SelectedItem这几兄弟你分的清楚嘛?
- 全球计算机网络覆盖率,覆盖率
- windows上后台运行程序
- 字典的介绍及增删改查、常见操作
- 梦幻诛仙linux纯端架设教程,【梦幻诛仙】【双端手游】【最完美,最全的,视频架设教程】...
- python不允许使用关键字作为变量名_python函数变量_python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数 - 云+社区 - 腾讯云...
- Java网络编程与NIO详解13:epoll、poll、select面试题汇总
- 数码照片冲印尺寸对照表