- 浏览: 84274 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
tianyaxue1987:
您好,最近有个项目要用到这个TableViewer,看了您的文 ...
表格(TableViewer类)(转) -
未来的梦:
不错,不错哦!!!
表格(TableViewer类)(转) -
legend26:
是str.equals()的吧?
判断String是否为空
http://blog.csdn.net/JavaTiger427/archive/2010/02/05/5290158.aspx
JAVA的界面布局原理:因为Java是跨平台语言,使用绝对坐标显然会导致问题,即在不同平台、不同分辨率下的显示效果不一样。Java 为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的所有组件安排给一个“布局管理器”负责管理,如:排列顺序,组件的大小,位置等,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。 Java中一共有6种布局管理器,通过使用6种布局管理器组合,能够设计出复杂的界面,而且在不同操作系统平台上都能够有一致的显示界面。6种布局管理器分别是BorderLayout、BoxLayout、FlowLayout、GirdBagLayout、GirdLayout和 CardLayout。其中CardLayout必须和其他5种配合使用,不是特别常用的。每种界面管理器各司其职,都有各自的作用。 首先,定义面板,为个个面板设置不同的布局,并根据需要在每个面板中放置组件: BorderLayout(布局管理器) BorderLayout 也是一种非常简单的布局策略,它把容器内的空间简单地划分为东、西、南、北、中无个区域,没加入一个组件都应该指明把这个组件加在哪个区域中。 BorderLayout是顶层容器( JFrame, JDialog, 和 JApplet )的默认布局管理器。有五个位置组件: 这个界面最多只能显示5个控件。加入控件的时候,可以指定加入的方位,默认的情况是加入到中间。在BorderLayout中整理尺寸是,四周的控件会被调整,调整会按照布局管理器的内部规则计算出应该占多少位置,然后中间的组件会占去剩下的空间。 BorderLayout 是Window,Frame和Dialog的缺省布局管理器. BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件.在使用 BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化.例如容器变高了,则North、South 区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽.不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果 Center区域没有组件,则保持空白. 流式布局管理器把容器看成一个行集,好象平时在一张纸上写字一样,一行写满就换下一行。行高是用一行中的控件高度决定的。FlowLayout是所有 JApplet/JApplet的默认布局。在生成流式布局时能够指定显示的对齐方式,默认情况下是居中(FlowLayout.CENTER)。在下面的示例中,可以用如下语句指定居左 GridLayout 将成员按网格型排列,每个成员尽可能地占据网格的空间,每个网格也同样尽可能地占据空间,从而各个成员按一定的大小比例放置。如果你改变大小, GridLayout将相应地改变每个网格的大小,以使各个网格尽可能地大,占据Container容器全部的空间。 基本布局策略是把容器的空间划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小区域中,所有的区域大小一样。组件按从左到右,从上到下的方法加入。 用构造函数划分出网格的行数和列数, 构造函数里的行数和列数能够有一个为零,但是不能都为零。当容器里增加控件时候,容器内将向0的那个方向增长。例如,如果是如下语句: GridLayout layout= new GridLayout(0,1); 在增加控件时,会保持一个列的情况下,不断把行数增长。 java.awt.GridBagConstraints 中的insets(0,0,0,0)的参数具体指的是: 使容器中各个组件呈网格状布局,平均占据容器的空间.当所有组件大小相同时,使用此布局.其构造函数为: BoxLayout(布局管理器 ) BoxLayout布局能够允许将控件按照X轴(从左到右)或者Y轴(从上到下)方向来摆放,而且沿着主轴能够设置不同尺寸。 构造BoxLayout对象时,有两个参数,例如: Public BoxLayout(Container target,int axis); Targe参数是表示当前管理的容器,axis是指哪个轴,有两个值??BoxLayout.X_AXIS和BoxLayout.Y_AXIS。 看如下的代码: 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才效果。 组件对齐一般来说: GridBagLayout(布局管理器) 这就是最复杂的一个布局管理器了,网格包布局.在此布局中,组件大小不必相同. GridBagContraints类的成员变量列表如下: 变量名 有效值 应用范围 定义 EAST NORTH anchor NORTHEAST 组件 组件在网格中排放的位置 SOUTH SOUTHWEST WEST BOTH HORIZONTAL fill VERTICAL 组件 组件填充网格的方式 NONE gridx,gridy RELATIVE 组件和显示区 组件的左上角网格的位置 整数X,Y值 1 gridheight RELATIVE 显示区 网格单元中组件显示区所占 gridwidth REMAINDER 的高度和宽度 宽,高度整数值 Insets (0,0,0,0) 组件和显示区 外部填充 ipadx,ipady 0 组件和显示区 内部填充
CardLayout(卡式布局)
CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面.布局管理器(CardLayout)就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,每一张牌就相当于布局管理器中的每一层.其实现过程如下:
panelOne.setLayout(new FlowLayout);
panelTwo.setLayout(new GridLayout(2,1));
再设置主面板.
CardLayout card = new CardLayout();
panelMain.setLayout(card);
下一步将开始准备好的面板添加到主面板
panelMain.add("red panel",panelOne);
panelMain.add("blue panel",panelOne);
add()方法带有两个参数,第一个为String类型用来表示面板标题,第二个为Panel对象名称.
完成以上步骤以后,必须给用户提供在卡片之间进行选择的方法.一个常用的方法是每张卡片都包含一个按钮.通常用来控制显示哪张面板.actionListener被添加到按钮..actionPerformed()方法可定义显示哪张卡片.:
card.next(panelMain); //下一个
card.previous(panelMain); //前一个
card.first(panelMain); //第一个
card.last(panelMain); //最后一个
card.show(panelMain,"red panel"); //特定面板
示例:
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(布局管理器)
JPanel panel= new JPanel(new FlowLayout(FlowLayout.LEFT)));
此为小应用程序(Applet)和面板(Panel)的缺省布局管理器,组件从左上角开始,按从左至右的方式排列.其构造函数为:
FlowLayout() //生成一个默认的流式布局,组件在容器里居中,每个组件之间留下5个像素的距离.
FlowLayout(int alinment) //可以设定每行组件的对齐方式.
FlowLayout(int alignment,int horz,int vert) //设定对齐方式并设定组件水平和垂直的距离.
当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化.
GirdLayout(布局管理器)
new GridLayout(行数,列数);
规定一个控件显示区的空白区。如果控件显示的inset为(10,5,20,0)
那么控件到显示区北边距离为10,西边为5,南边为20,东边为0控件会比显示区小。如果inset为负,控件会超出显示区
GridLayout()
GridLayout(int row,int col)
GridLayout(int row,int col,int horz,int vert)
所有top-to-bottom BoxLayout object 应该有相同的 X alignment。
所有left-to-right Boxlayout应该有相同的 Y alignment
setAlignmentX 和setAlignmentY 可以实现对齐。
GridBagLayout gb=new GridBagLayout();
ContainerName.setLayout(gb);
以上代码是让容器获得一个GridBagLayout .
要使用网格包布局,还必须有其一个辅助类,GridBagContraints.它包含GridBagLayout类用来定位及调整组件大小所需要的全部信息.使用步骤如下:
1).创建网格包布局的一个实例,并将其定义为当前容器的布局管理器.
2).创建GridBagContraints的一个实例
3).为组件设置约束.
4).通过方法统治布局管理器有关组件及其约束等信息
5).将组件添加到容器.
6).对各个将被显示的组件重复以上步骤..
1).gridx,gridy
指定组件放在哪个单元中.其值应该设为常数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()方法可以设置各组件约束.
GridBagLayout是是在GridLayout的基础上发展起来的,是五种布局策略中使用最复杂,功能最强大的一种,它是在GridLayout的基础上发展起来的。因为GridBagLayout中每个网格都相同大小并且强制组件与网格大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然,而且组件假如容器中必须按照固定的行列顺序,不够灵活。在GridBagLayout中,可以为每个组件指定其包含的网格个数,组件可以保留原来的大小,可以以任意顺序随意地加入容器的任意位置,从而实现真正自由地安排容器中每个组件的大小和位置。
通过创建一个gridBagConstraints实例为组件设置布局参数:
gridx, gridy
gridwidth, gridheight
fill
ipadx, ipady
insets
anchor
CENTER (the default), NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, and NORTHWEST.
weightx, weighty
CENTER
发表评论
-
Java_Ant详解(一)
2011-01-17 23:23 700转自 http://apps.hi.baidu.com/sh ... -
Java与C#比较(转)
2010-11-11 22:07 1276http://blog.csdn.net/zhoufoxc ... -
Java运算符和优先级
2010-11-04 21:13 835优先级 运算符 结合性 1 () [] . ... -
堆(heap)与栈(stack)的区别
2010-10-02 15:19 831堆(heap)和栈(stack) 2007/11/17 ... -
set、List、map的区别(转)
2010-10-02 11:17 0List接口对Collection进行了简单的扩充,List代 ... -
Collection和Collections的区别[转]
2010-10-02 11:07 1167Collection是个java.util下的接口,它是各 ... -
比较Vector和ArrayList
2010-10-01 21:48 615要回答这个问题不能一概而论,有时候使用Vector比较好; ... -
int和Integer
2010-05-27 15:49 767nt 是基本类型,直接存 ... -
java中的int和char,string的转换
2010-04-24 22:33 3519int -> char: ... -
内存溢出java.lang.outofmemoryError:Java heap space
2009-07-01 09:54 876有2种可能导致OutOfMemoryE ... -
遍历HashMap
2009-04-23 17:04 2395可以通过2种方法遍历HashMap Map map = ne ... -
java 中四种xml解析方式
2009-04-13 13:45 851测试方法: 采用 JSP 端调用Bean(至于为什么采用J ... -
断网时用jdom读取hibernate.cfg.xml的错误
2009-04-01 22:30 1822利用jdom解析hibernate.cfg.xml,本来都是在 ... -
List转换成String数组;数组转换成List
2009-03-24 13:47 37871、List转换成String数组 方法一: L ... -
(转)java string的==操作
2009-03-22 23:28 810初学 Java 有段时间了, ... -
判断String是否为空
2009-03-16 23:20 1466String str; 的str.isEmpty()判断str ... -
java的访问控制符
2009-03-16 23:05 1173public 可以被所有其他类访问 private 只能被自身 ... -
String的replace()与replaceAll()
2009-03-16 21:05 1879replace和replaceAll是JAVA中常用的替换字符 ... -
String的substring函数
2009-03-16 20:16 906String url=""; String ...
相关推荐
java布局管理器测试代码,绝对能运行,环境为jdk1.6下
韩顺平java图形界面编程之常用组件、布局管理器
java 如何使用BoxLayout布局管理器 java 如何使用BoxLayout布局管理器
swing 组件的各种布局管理器,每一个都有实例,不明白的时候可以查查
可以帮助Java学习者深入了解边界布局管理器
java 常用布局管理器
java边界布局管理器小例 适合初学者,代码准确,难度适中
卡片布局的基本设计!包含实验的4个程序 还有计算器的界面设计!
布局管理器和事件代码处理课件,初学者的好助手
Swing布局管理器,标准布局管理器,自定义布局管理器
GridBagLayout布局管理器:主要是关于java中GridBagLayout的布局,该文档详细描写的GridBagLayout的具体用法。
java布局管理,关于一些基础和高级的应用
java FlowLayout布局管理 java FlowLayout布局管理 java FlowLayout布局管理
java GUI 中的五种布局管理器的经典例子,可以参考一下!!!
this.setTitle("使用流布局管理器"); //设置窗口名称 jp.setLayout(new FlowLayout()); //设置面板的布局为流布局 jp.add(jb1); //将按钮添加到面板中 jp.add(jb2); jp.add(jb3); jp.add...
自行设计程序,创建一个标题为“计算器”的框架。要求有菜单项,文本框、按钮等控件。采用BorderLayout或者GridLayout布局管理器。
Java布局管理器使用方法探讨.doc
BorderLayout——边界布局管理器:FlowLayout——流式布局管理器:GridLayout——网格布局:CardLayout——卡片式布局:...
主要介绍了Java Swing组件布局管理器之FlowLayout(流式布局),结合实例形式分析了Swing组件布局管理器FlowLayout流式布局的常用方法及相关使用技巧,需要的朋友可以参考下
Swing常见布局管理器总结