西安做网站招聘无锡网站优化公司
在Java的GUI中布局是用来为容器划分区域的,这就决定了控件在容器中的摆放位置,从而为容器规划好分区方式
常用的布局管理器有7中:FlowLayout、BorderLayout、GridLayout、BoxLayout、GridBagLayout、CardLayout、
在一些顶层容器和面板中,已经规定了默认的布局管理器:
javax.swing.JApplet——BorderLayout
javax.swing.JFrame——BorderLayout
javax.swing.JDialog——BorderLayout
javax.swing.JPanel——FlowLayOut
除此之外。我们还能够自定义布局管理器,还能够一绝对位置坐标来制定组件在容器中的放置位置
由于布局管理器的创建和使用都非常的简单,所以下面我们只对这些布局管理器的功能和特殊的方法做一些简单的介绍,具体的方法查阅官方文档
《》FlowLayout流布局管理器
构造方法public FlowLayout(int align,int hgap,int vgap)
align——指定组件的对其方式:
FlowLayout.CENTER/ FlowLayout.LEFT/ FlowLayout.RIGHT
hgap和vgap分别指定放入其中的组件的水平间隙和垂直间隙
《》GridLayout网格布局管理器
网格布局管理器是将容器划分成具有指定行列的棋盘状的网格,在添加组件时从左到右,从上到下依次在各个网格中添加,当然我们也可以指定这些组件间的间隙
《》BorderLayout边界布局管理器
这个管理器将容器划分成五个矩形格分别为:
分别由静态常量
BorderLayout.PAGE_START
BorderLayout.PAGE_EDN
BorderLayout.LINE_START
BorderLayout.LINE_END
BorderLayout.CENTER指定组件的放置位置
也能够指定组件之间的间隙
在基类中java.awt.Container中,有一个方法指专门用来限定组件的添加的方法:public void add( Component comp,Object constraints);我们可以将constraints设置为上面知道列出的那些常量值,从而指定组件的存放位置
《》BoxLayout盒式布局管理器
这个布局管理器允许多个组件在水平方向和竖直方向进行添加,而不受任何限制,只要指定布局管理器的组件添加方向,之后只要添加组件就自动将组件在已有组件的后方添加,不论添加多少都不会换行或者换列,即使已经超出当前设定的窗口的长度或宽度,所以可能有的组件是不够在当前窗口中显示的;但是这个布局管理器有一点非常的特殊,那就是当窗口改变时,添加到其中的组件的大小是并不发生变化的,不会像其他的管理器那样组件会随着窗口的改变而改变大小;但是这种布局管理器是非常的灵活的,可以通过容器的组合,创建一些不受限制的图形化窗口
构造方法也要注意一下:
public BoxLayout( Container target ,int axis) ;
实际在创建这种布局管理的实例是:
JFrame myFrame = new JFrame(“布局管理器”) ;
Container c = myFrame.getContentPane() ;
c.setLayout(new BoxLayout(c,BoxLayout.X_AXIS));
需要注意的是虽然在BoxLayout的构造方法中已经制定了target对象是c,但是还是要通过使用setLayout方法来设定
axis——指定组件的添加方向:
BoxLayout.X_AXIS
BoxLayout.Y_AXIS
《》GridBagLayout网格包布局管理器
网格布局管理器将容器按行和列等分成棋盘,每个矩形的区域被称为单元格;而且允许加入的组件占用对个不同的连续的单元格
一般来说,网格包布局管理器通常和网格包束缚(GridBagConstriants)类配合使用,网格包束缚类的对象是专门用于指定添加到网格包布局管理器中的组件的添加方式的对象,通过只用这个对象就能够按照程序员的意愿来讲组件添加到指定的位置上;我们首先来举一个例子,看看网格包布局管理器和网格包束缚类是如何配合使用达到上面的图像的显示那样的效果的
接下来我们分析一下这些方法的实际意义:
(1)网格包布局管理器构造方法
public GridBagLayout()
网格包束缚构造方法
public GridBagConstraints() ;
(2)在java.awt.GridBagConstraints类中,有成员域:
public int gridx,gridy ;
分别是指定即将添加的组件在容器中的网格坐标。
public int gridwidth,gridheight;
分别指定即将添加的组件在容器中的宽和高
坐标和宽高分别是以单元格数为参考的;需要注意的是,网格包布局管理器类中并没有指定将容器划分成多少行列的方法,也就是说,实际上,这个布局管理器是根据当前添加进容器中的组件的实际情况来自行调整这些组件的实际占位和大小的,只要容器中的组件还没有添加完毕,那么所有的组件的最终的占位和大小实际上都是不能够确定的,也就是说我们指定的网格坐标和组件的大小实际上是一种逻辑上的指定,布局管理器按照我们的意图将添加的组件进行调整,但是一般情况下,结果和我们预想的效果是一致的。
(3)Java.awt.GridBagConstraints的成员域
public int fill ;
这个成员用来指定,组件在容器中的填充模式,就像程序中那样。我们都是用类中的静态常量来制定填充方式:
GridBagConstraints.NONE//不调整组件的大小
GridBagConstraints.HORIZONTAL
//调整组件的宽度,是组件在水平上填满指定的区域
GridBagConstraints.VERTICAL
//调整组件的长度,是组件在竖直上填满指定的区域
GridBagConstraints.BOTH
//调整组件的长和宽,是组建填满指定的区域
默认的填充方式是NONE,如果上面的程序中采用NONE填充方式的话,效果为:
(4)通过GridBagLayout的成员方法
public void setContraints(Component comp , GridBagConstraints constraints ) ;
使用这个方法就能够将comp组件和constraints指定的束缚对象联系起来,指定comp组件在添加到myFrame中时应该遵循的添加规则;最后将组件添加进去进行了
《》CardLayout选项卡布局管理器
这种布局管理器就像是一叠完全重合扑克牌一样,这些卡片共用一个显示区域,只是会根据用户的选择,将选择的卡片显示到最上面,他不仅能够顺序的显示这些卡片,也能够像上面那样显示任意的一张,但是要注意的是管理器并不会改变这些卡片的相对顺序;下面先用一个实例来理解一下:
际上在Button3的选项卡下面压着其他的选项卡;
(1)构造方法
public CardLayout() ;
public CardLayout(int hgap , int vgap) ;
参数指定选项卡与所在的容器的边界的水平、竖直间距
(2)如果某个容器或者面板使用了CardLayout作为管理器的话,就需要用使用容器或面板中的形如
public void add(Component cmp , Object obj) ;
public void add(String str, Component cmp) ;
的添加方法,只有这样才能够将选项卡和指定的对象联系起来
比如上面的例子中将String类型的索引和选项卡联系起来,就能够通过String字符串来找到对应的选项卡,否则,选项就会丢失;一般来说都是将选项卡和String字符串联系起来
(3)CardLayout中的一些成员方法:
public void next() ;
//将当前显示的选项卡放到最后,将下一张卡显示出来
public void previous() ;
//将最后的一张选项卡显示出来
注意上面的这两个方法的规则都说明了,这并不改变选项卡的相对顺序;
public void show(Container parent, String name )
//将指定的容器中的指定的选项卡显示出来
从上面的实例中可以知道实际上,我们都是将JList和CarLayout结合起来使用,才能够达到真正的实用效果,接下来我们通过一个综合实例来展示CardLayout的用法
最终的结果是:
即选中不同的选项卡能够显示不同的颜色面板
《》JTabbedPane标签式对话框
在java.swing中提供了专门提供了一个标签式对话框容器类型的控件,他并不是布局管理器,但是能够完成和CardLayout相同的功能效果是:
《》绝对定义方式
就像时说的那样,我们可以不适用任何的布局管理器,而是采用绝对定义方式来放置组件,需要注意的是,由于很多的容器已经有默认的布局管理器了,所以在采用绝对定义方式时,必须将默认的布局管理器关闭,方法非常的简单,那就是调用方法setLayout时将null作为参数传入,之后使用需要听过调用组件的setBounds()方法来指定组件的绝对位置