5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)
应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这样,为了操作方便,也只是在大的模块下用布局管理器,在一些小的模块下还是用绝对布局。在一些没要求界面大小改变的窗口,一般采用绝对布局比较容易,但对于后期的修改来说比较麻烦。
这种布局管理器分为东、南、西、北、中心五个方位。北和南的组件可以在水平方向上拉伸;而东和西的组件可以在垂直方向上拉伸;中心的组件可同时在水平和垂直方向上同时拉伸,从而填充所有剩余空间。在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South 区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果 Center区域没有组件,则保持空白。BorderLayout是RootPaneContainer(JInternalFrame、JDialog、JFrame、JWindow)的默认布局管理器。
import java.awt.*;
public class buttonDir{
public static void main(String args[]){
Frame f = new Frame("BorderLayout");
f.setLayout(new BorderLayout());
f.add("North", new Button("North");
//第一个参数表示把按钮添加到容器的North区域
f.add("South", new Button("South");
//第一个参数表示把按钮添加到容器的South区域
f.add("East", new Button("East");
//第一个参数表示把按钮添加到容器的East区域
f.add("West", new Button("West");
//第一个参数表示把按钮添加到容器的West区域
f.add("Center", new Button("Center");
//第一个参数表示把按钮添加到容器的Center区域
f.setSize(200,200);
f.setVisible(true);
}
}
该布局称为流式布局管理器,是从左到右,中间放置,一行放不下就换到另外一行。一行能放置多少组件取决于窗口的宽度。默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中(FlowLayout.CENTER)。FlowLayout为小应用程序(Applet)和面板(Panel)的默认布局管理器。其构造函数示例为:
这种布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面。CardLayout就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,一张牌就相当于布局管理器中的一层。 所有的组件像卡片一样叠在一起,每时每刻都只能显示其中一张卡片。CardLayout常用到切换界面。例如,点击App的Menu之后或者某个Button之后,主界面会切换到另外一个界面,这个时候就需要CardLayout。其实现过程如下:
panelTwo.setLayout(new GridLayout(2,1));
CardLayout card = new CardLayout();
panelMain.setLayout(card);
panelMain.add("red panel",panelOne);
panelMain.add("blue panel",panelOne);
card.first(panelMain); //第一个
card.last(panelMain); //最后一个
card.show(panelMain,"red panel"); //特定面板
这种布局是网格式的布局,窗口改变的时候,组件的大小也会随之改变。每个单元格的大小一样,而且放置组件时,只能从左到右、由上到下的顺序填充,用户不能任意放置组件。如果改变大小, GridLayout将相应地改变每个网格的大小,以使各个网格尽可能地大,占据Container容器全部的空间。
new GridLayout(行数,列数);
GridLayout(int row,int col)
GridLayout(int row,int col,int horz,int vert)
BoxLayout布局能够允许将控件按照X轴(从左到右)或者Y轴(从上到下)方向来摆放,而且沿着主轴能够设置不同尺寸。 构造BoxLayout对象时,有两个参数,例如:
JPanel jpanel=new JPanel(); Jpanel.setLayout(new BoxLayout(jpanel,BoxLayout.Y_AXIS); TextArea testArea=new TextArea(4,20); JButton button=new JButton(“this is a button”); jpanel.add(testArea); jpanel.add(button);
//容纳testArea和button的容器,对他们沿Y轴(从上往下)放置,并且文本域和按纽左对齐,也就是两个控件的最左端在同一条线上。
testArea.setAlignmentX(Component.LEFT_ALIGNMENT); button. setAlignmentX(Component.LEFT_ALIGNMENT);
//容纳testArea和button的容器,对他们采用沿Y轴(从上往下)放置,并且文本域最左端和按纽的最右端在同一条线上。
testArea.setAlignmentX(Component.LEFT_ALIGNMENT); button. setAlignmentX(Component.RIGHT_ALIGNMENT);
setAlignmentX(left,right)只有在布局是BoxLayout.Y_AXIS才效,而setAlignmentY(top,button)在布局为BoxLayout.X_AXIS才效果。
组件对齐一般来说:
所有top-to-bottom BoxLayout object 应该有相同的 X alignment。
所有left-to-right Boxlayout应该有相同的 Y alignment
setAlignmentX 和setAlignmentY 可以实现对齐。
可以完成复杂的布局,而且IDE对它有足够的支持,是一个很强大的Layout。不过它过于复杂,在此布局中,组件大小不必相同。可以采用以下代码容器获得一个GridBagLayout:
ContainerName.setLayout(gb);
2) 创建GridBagContraints的一个实例
3) 为组件设置约束.
4) 通过方法统治布局管理器有关组件及其约束等信息
5) 将组件添加到容器.
6) 对各个将被显示的组件重复以上步骤.
指定组件放在哪个单元中。其值应该设为常数CridBagConstraints.RELATIVE 。然后按标准顺序将组件加入网格包布局。从左到右,从上到下。
2) gridwidth,gridheight
指定组件将占用几行几列
3) weightx,weighty
指定在一个GridBagLayout中应如何分配空间。缺省为0。
4) ipadx,ipady
指定组件的最小宽度和高度。可确保组件不会过分收缩。
5) fill
指定在单元大于组件的情况下,组件如何填充此单元,缺省为组件大小不变,以下为静态数据成员列表,它们是fill变量的值。
GridBagConstraints.NONE 不改变组件大小
GridBagConstraints.HORIZONTAL 增加组件宽度,使其水平填充显示区域
GridBagConstraints.VERTICAL 增加组件高度,使其垂直填充显示区域
GridBagConstraints.BOTH 使组件填充整个显示区域
6) anchor
如果不打算填充可以通过anchor指定将组件放置在单元中的位置,缺省为将其放在单元的中部。可使用以下静态成员:
GridBagConstraints.CENTER
GridBagConstraints.NORTH
GridBagConstraints.EAST
GridBagConstraints.WEST
GridBagConstraints.SOUTH
GridBagConstraints.NORTHEAST
GridBagConstraints.SOUTHEAST
GridBagConstraints.NORTHWEST
GridBagConstraints.SOUTHWEST
使用setConstraints()方法可以设置各组件约束。
变量名 |
有效值 |
应用范围 |
定义 |
anchor |
CENTER EAST NORTH NORTHEAST SOUTH SOUTHWEST WEST |
组件 |
组件在网格中排放的位置 |
fill |
BOTH HORIZONTAL VERTICAL NONE |
组件 |
组件填充网格的方式 |
gridx,gridy |
RELATIVE 整数X,Y值 |
组件和显示区 |
组件的左上角网格的位置 |
gridheight gridwidth |
1 RELATIVE REMAINDER 宽,高度整数值 |
显示区 |
网格单元中组件显示区所占的高度和宽度 |
Insets |
(0,0,0,0) |
组件和显示区 |
外部填充 |
ipadx,ipady |
0 |
组件和显示区 |
内部填充 |
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.ipadx = 3;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0);
pnlContent.add(btn, gridBagConstraints)
这种管理器把容器划分为行和列,就像是电子表格中的单元格。Tablelayouot把行和列交叉的每一个格子称为基本的单元格(cell)。组件被添加到容器划分好的单元格中。当容器发生改变(伸缩)时,单元格也随之伸缩,装载在单元格里的组件也相应的会进行伸缩。
(1)、虽然Tablelayout它不是JDK自带的,但是它是开源的。Tablelaout作为开源的布局框架,可以对核心的类TableLayout.java进行修改达到自己所需要的功能实现。Tablelayout布局与html中表格基本是一样的,我们可以任意而且轻易地合并单元格,可以完成很复杂的布局。
(2)、当窗口的大小发生改变时,在tableLayout布局下得组件也会自动改变,按%比来分配每行,每列的大小。
(3)、TableLayout简单明了,不需要过多设置属性值,也能布局到复杂的外观,而不像GridBagLayout那样需要设置很多的属性(gridx、gridy、insets等等)过于复杂。
5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)的更多相关文章
- JavaGUI三种布局管理器FlowLayout,BorderLayout,GridLayout的使用
三种布局管理器 流式布局FlowLayout package GUI; import java.awt.*; import java.awt.event.WindowAdapter; import j ...
- Java Swing布局管理器GridBagLayout的使用示例 [转]
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...
- learning java AWT 布局管理器FlowLayout
AWT提供了FlowLayout 从左到右排列所有组件,遇到边界就会折回下一行重新开始. import java.awt.*; public class FlowLayoutTest { publ ...
- 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...
- 编写Java程序,使用Swing布局管理器与常用控件,实现用户登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器与常用控件,实现用户登录界面 实现思路: 创建用户登录界面的类LoginFrame,在该类中创建无参数的构造方法,在构造方法中,设置窗体大 ...
- java基础 布局管理器
概念: 组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理. 种类: java共提供了物种布局管理器:流式布局管理 ...
- Swing布局管理器
在Swing中使用的所有布局管理器都可以实现LayoutManager接口.Swing中有五种常见的布局管理器分别为FlowLayout.BorderLayout.GridLayout.CardLay ...
- Java GUI 布局管理器
容器可设置布局管理器,管理容器中组件的布局: container.setLayout(new XxxLayout()); Java有6种布局管理器,AWT提供了5种: FlowLayout Borde ...
- java 图形化小工具Abstract Window Toolit ;布局管理器FlowLayout流式布局;BorderLayout边界布局;GridLayout网格布局;CardLayou重叠卡片布局;BoxLayout方框布局;绝对定位
1.FlowLayout流式布局管理器: FlowLayout布局管理器中,组件像水流一样向某方向流动(排列),遇到障碍(边界)就折回,重头开始排列 .在默认情况下,FlowLayout局管理器从左向 ...
随机推荐
- Python__slots__详解
摘要 当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): __slots__ = ['foo'].这样做带来以下优点: 更快的属性 ...
- PIC32MZ Live update bootloader
PIC32MZ 的 flash memory 支持live update, 这是个全新的特性,在之前的所有PIC不管是8位还是16位的单片机上面都没有这个特性.我写过很多PIC 8位和16位单片机的b ...
- 设计模式的征途—2.简单工厂(Simple Factory)模式
工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...
- 如何使用第三方webservice
webservice地址后加wdls 生成后把文件名改为wdsl 调用方式: 1.添加webservice引用: 2.生成代理类的方法(本人比较喜欢用这种方式): 使用cmd命令行: a.通过webs ...
- window下安装mysqldb模块(虚拟环境)
因为在虚拟环境下安装mysql-python走了许多弯路,各种环境问题,特此记录 直接使用pip安装mysql-python会报错 pip install MySQL-python 可以直接选择非虚拟 ...
- view测量
一.测规格是由测量模式mode和测量大小size组成的,size好说,那测量模式mode代表什么含义呢.由上面的代码可知,测量模式有三类: UNSPECIFIED 父控件不对你有任何限制, ...
- 使用live555 在linux下搭建 rtsp server
系统环境 Debian 7 x64 / centos 7 x64 都可以 首先去下载源码 http://www.live555.com/liveMedia/public/live555-lates ...
- react基于nodejs简单的搭建与开发方法
只需安装babel命令,即可将react的jsx写法转换成浏览器认识的js写法 1.安装nodejs(百度下载安装即可,自带npm) 2.cmd打开命令行,cd进入在自己的文件夹下 执行命令: npm ...
- sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探
序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进j ...
- C#是否该支持“try/catch/else”语法
以前用过一段时间Python,里面有个try/catch/else语法,我觉得挺好用,这个语法形如下: try: print('try...') r = 10 / int('2') print('re ...