布局管理器之FlowLayout、BorderLayout、SpringLayout

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(边界布局)

边界布局管理器把容器的的布局分为五个位置:CENTEREASTWESTNORTHSOUTH。依次对应为:上北(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 (弹簧布局)

在 Java 布局管理器方面,最新增加了 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/


你可能感兴趣的:(Java,swing,Java)