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局管理器从左向 ...
随机推荐
- 获取VB类模块成员函数指针(转)
最近在做一些VB6.VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找. 参照连接1:http://www.cnblogs.com ...
- Java并发编程:Semaphore、CountDownLatch、CyclicBarrier
首先我们来实现一个功能:当我们启动一个系统的时候需要初始化许多数据,这时候我们可能需要启动很多线程来进行数据的初始化,只有这些系统初始化结束之后才能够启动系统.其实在Java的类库中已经提供了Sema ...
- Java并发编程:线程的基本状态
一.线程的基本状态 线程基本上有5种状态,分别是:NEW.Runnable.Running.Blocked.Dead. 1)新建状态(New) 当线程对象对创建后,即进入了新建状态,如:Thread ...
- liunx文件与用户和群组
文件基本属性 在图片中alogrithm的文件属性为drwxrwxr-x,其中d代表此文件为目录. 后面rwx,rwx,r-x分别代表文件所属者(ower),组(group),其他用户(other)的 ...
- jQuery入门:认识jQuery
jQuery是一个轻量级的JavaScript库,拥有独特的选择器.出色的DOM操作.可靠的事件处理.完善的兼容性.链式操作以及方便的ajax等功能.jQuery的最新版本可在官方网站(http:// ...
- coolpad 5879logcat不能输入日志解决办法
有几天没完手机了,玩一下,发现不能打印日志了,记得最开始的时候 会弹出一个选项选择是否输出日志,在网上找了好的方法. 1.重启adb,点击DBMS 进行刷新. 2重启eclipse. 3.重装驱动. ...
- 天气渐热,来片雪花降降温——Android自定义SurfaceView实现雪花效果
实现雪花的效果其实也可以通过自定义View的方式来实现的(SurfaceView也是继承自View的),而且操作上也相对简单一些,当然也有一些不足啦... 相对于View,SurfaceView有如下 ...
- HibernateTemplate的使用
HibernateTemplate 提供了非常多的常用方法来完成基本的操作,比如增加.删除.修改及查询等操作,Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持.大部分情况下, ...
- 从零开始用 Flask 搭建一个网站(二)
从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构.我们要搭建的网站是管理第三方集成的控制台,类似于 Slack. 本篇主要讲解数据如何 ...
- MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析
摘要:mapreduce中执行reduce(KEYIN key, Iterable<VALUEIN> values, Context context),调用一次reduce方法,迭代val ...