Java swing做前端时常常遇到布局管理器,现对FlowLayout、BorderLayout、SpringLayout进行说明记录
Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性。
注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器。
一、布局管理器所属类包
所属类包 |
布局管理器名称 |
说明 |
Java.awt |
FlowLayout(流式布局) |
组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 |
BorderLayout(边界布局) |
容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。 |
|
GridLayout(网格布局) |
容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。 |
|
CardLayout(卡片布局) |
如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况 |
|
GridBagLayout(网格包布局) |
GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格 |
|
Java.swing |
BoxLayout(箱式布局) |
允许在容器中纵向或者横向防止多个控件 |
SprigLayout(弹簧布局) |
根据一组约束条件放置控件 |
|
无 |
空布局 |
不使用布局管理器,按照控件自身提供的大小、位置信息放置控件 |
二、FlowLayout(流式布局)
使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,一行排满(即组件超过容器宽度后)到下一行开始继续排列。
1、流式布局特征如下:
组件按照设置的对齐方式进行排列;不管对齐方式如何,组件均按照从左到右的方式进行排列,一行排满,转到下一行。(比如按照右对齐排列,第一个组件在第一行最右边,添加第二个组件时,第一个组件向左平移,第二个组件变成该行最右边的组件,这就是从左向右方式进行排列)
2、流式布局FlowLayout类的常用构造函数和方法
构造函数 |
||
名称 |
用途 |
|
FlowLayout() |
构造一个新的 FlowLayout,它是默认居中对齐的,默认的水平和垂直间隙是5个像素 |
|
FlowLayout(int align) |
构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是 5 个像素 五个参数值及含义如下: 0或FlowLayout.lEFT ,控件左对齐 1或FlowLayout.CENTER ,居中对齐 2或FlowLayout.RIGHT ,右对齐 3或FlowLayout.LEADING,控件与容器方向开始边对应 4或FlowLayout.TRAILING,控件与容器方向结束边对应 如果是0、1、2、3、4之外的整数,则为左对齐 |
|
FlowLayout(int align, int hgap, int vgap) |
创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。 |
|
方法 |
||
名称 |
用途 |
|
Void setAlignment(int align) |
设置此布局的对齐方式。 |
|
void setHgap(int hgap) |
设置组件之间以及组件与 Container 的边之间的水平间隙。 |
|
void setVgap(int vgap) |
设置组件之间以及组件与 Container 的边之间的垂直间隙。 |
三、BorderLayout(边界布局)
边界布局管理器把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER),如下图所示。
1、特征:
可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER;南、北位置控件各占据一行,控件宽度将自动布满整行。东、西和中间位置占据一行;若东、西、南、北位置无控件,则中间控件将自动布满整个屏幕。若东、西、南、北位置中无论哪个位置没有控件,则中间位置控件将自动占据没有控件的位置。
2、常见的构建函数和方法
构造方法摘要 |
||
BorderLayout(): 构造一个组件之间没有间距(默认间距为0像素)的新边框布局。 |
|
|
BorderLayout(int hgap, int vgap) : 构造一个具有指定组件(hgap为横向间距,vgap为纵向间距)间距的边框布局。 |
|
|
方法摘要 |
||
int |
getHgap() : 返回组件之间的水平间距。 |
|
int |
getVgap() : 返回组件之间的垂直间距。 |
|
void |
removeLayoutComponent(Component comp): 从此边框布局中移除指定组件。 |
|
void |
setHgap(int hgap): 设置组件之间的水平间距。 |
|
void |
setVgap(int vgap) : 设置组件之间的垂直间距。 |
三、 SpringLayout (弹簧布局)
SpringLayout
管理器,它是与 Java 1.4 一起发布的。这种布局管理器允许您将“spring”附加到组件上,这样组件就可以相对于其他组件进行布局。例如,利用SpringLayout
您可以让一个按钮依附于右边框来进行显示,而不管用户将屏幕宽度设为多大。SpringLayout
控制的组件,有一个带有 4 个设置值的约束 -- 每个设置值对应于组件的每条边。 SpringLayout
管理器依赖一个 SpringLayout.Constraints
对象来提供这些组件约束。实例:
JPanel rootpane = new JPanel(); //对话框中的主面板
add(rootpane, 0); //添加主面板到对话框
rootpane.setBackground(new Color(15592941)); //设置主面板的背景颜色
SpringLayout spring = new SpringLayout(); //主面板中的布局(弹性布局管理器)
rootpane.setLayout(spring); //设置主面板的布局
//将约束链接各组件
/*spring.putConstraint("North", getToolbar(), 6, "North", rootpane);
spring.putConstraint("West", getToolbar(), 0, "West", rootpane);
spring.putConstraint("East", getToolbar(), 0, "East", rootpane);
rootpane.add(getToolbar()); //添加发送取消工具条到主面板
spring.putConstraint("North", getContextPane(), 0, "South", getToolbar());
spring.putConstraint("West", getContextPane(), 0, "West", rootpane);
spring.putConstraint("East", getContextPane(), 0, "East", rootpane);
rootpane.add(getContextPane()); //添加发送功能区面板到主面板
spring.putConstraint("North", getTextPane(), 0, "South", getContextPane());
spring.putConstraint("West", getTextPane(), 0, "West", rootpane);
spring.putConstraint("East", getTextPane(), 0, "East", rootpane);
spring.putConstraint("South", getTextPane(), 0, "South", rootpane);
rootpane.add(getTextPane()); //添加发送内容区面板到主面板
*/
spring.putConstraint("North", getContextPane(), 6, "North", rootpane);
spring.putConstraint("West", getContextPane(), 0, "West", rootpane);
spring.putConstraint("East", getContextPane(), 0, "East", rootpane);
rootpane.add(getContextPane()); //添加发送功能区面板到主面板
spring.putConstraint("North", getTextPane(), 0, "South", getContextPane());
spring.putConstraint("West", getTextPane(), 0, "West", rootpane);
spring.putConstraint("East", getTextPane(), 0, "East", rootpane);
spring.putConstraint("South", getTextPane(), 0, "North", getToolbar());
rootpane.add(getTextPane()); //添加发送内容区面板到主面板
spring.putConstraint("West", getToolbar(), 0, "West", rootpane);
spring.putConstraint("East", getToolbar(), 0, "East", rootpane);
spring.putConstraint("South", getToolbar(), 0, "South", rootpane);
rootpane.add(getToolbar()); //添加发送取消工具条到主面板
实例:
setLayout(new BorderLayout());//设置边界布局
UISplitPane sp = new UISplitPane();
//sp.setLayout(new FlowLayout());
sp.add(getLeftContentPanel(), "left");//分割面板添加左面板
sp.add(getRightContentPanel(), "right");//分割面板添加右面板
sp.setOneTouchExpandable(true);
sp.setDividerLocation(240);
sp.setSize(600, 500);
sp.setDividerSize(0);//分割条的宽度
sp.setBorder((LineBorder)BorderFactory.createLineBorder(Color.gray));//设置边框线
add(sp, "Center");//中间内容面板添加分割面板
UIPanel west = new UIPanel();//
west.setPreferredSize(new Dimension(6, 200));//
add(west, "West");//
UIPanel east = new UIPanel();//
east.setPreferredSize(new Dimension(6, 200));//
add(east, "East");//
参考文献:
http://blog.csdn.net/liujun13579/article/details/7771191
http://blog.csdn.net/liujun13579/article/details/7772215
https://www.ibm.com/developerworks/cn/java/j-mer09173/