AWT布局管理器

AWT的布局管理器:

FlowLayout:从左向右排列所有组件,遇到边界就会折回下一行从新开始。

构造器:FlowLayout()、FlowLayout(int align)、FlowLayout(int align, int hgap, int vgap)

其中的hgap和vgap代表水平间距和垂直间距,align指的是组件的排列方向(从左向右,从右向左,从中间向两边)

使用FlowLayout的静态常量来设置这个参数:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT。

 

 

BorderLayout:将容器分为EAST(东),SOUTH(南),WEST(西),NORTH(北),CENTER(中央)

在向使用此布局管理器的容器中添加组件时,需要制定添加到的区域,否则默认添加到中间区域里,而当我们向一个区域添加多个组件时,后放入的组件会覆盖前面的组件。

构造器:BorderLayout()、BorderLayout(int hgap,int vgap)

hgap和vgap代表的水平间距和垂直间距。

指定组件添加到的区域时,可以使用它的静态常量:BorderLayout.EAST、BorderLayout.WEST、BorderLayout.NORTH、BorderLayout.SOUTH、 BorderLayout.CENTER。

eg:

Frame frame = new Frame();

frame.setLayout(new BorderLayout(5,5));

frame.add(new Button("南"),SOUTH);

BorderLayout最多只能放5个组件

但是可以先在Panel中添加多个组件,再将Panel添加到BorderLayout布局管理器中,因此实际可以放的组件要远超过5个。

 

 

GridLayout:将容器分割成大小相同的网格,在添加组件时默认从左到右从上到下,将组件依次添加到每个网格中,每个组件的大小由其所添加到的网格的大小所决定。

构造器:GridLayout(int rows,int cols)、GridLayout(int rows ,int cols,int hgap,int vgap)

 

CardLayout:加入容器的组件类似一叠卡片,只有最上面的组件内容可见。

构造器:CardLayout()、CardLayout(int hgap, int vgap)

控制组件的方法:

first(Container target);//显示target容器中的第一张卡片

last(Container target);

previous(Container target);

next(Container target);

show(Container target,String name);//显示targer容器中指定名字的卡片

 

 

GridBagLayout:是功能最强大也是最复杂的布局管理器,添加到其中的组件可以横跨一个或多个网格,并可以设置各网格的大小各不相同,当窗口大小发生变化时,其也可以准确的控制窗口各部分的反应。为了处理GridBagLayout中组件的大小和跨越性,我们还需要一个GridBagConstraints对象,用这个对象与特定的组件相关联,来控制组件的大小和跨越性。在使用GridBagLayout时一般需要4步:

1.  创建GridBagLayout,并指定容器使用该布局管理器

GridBagLayout gb = new GridBagLayout();

container.setLayout(gb);

      2.     创建GridBagConstraints的对象,并设置该对象的相关属性

         GridBagConstraints gbc = new GridBagConstraints();

         gbc.gridx=2;

         gbc.gridy=1;

         gbc.gridwidth=2;

         gbc.gridheight=1;

3.      调用GridBagLayout对象的方法来建立GridBagConstraints对象与受控制组件之间的联系。

    gb.setConstraints(c,gbc);//设置c组件受gbc控制

4.       添加组件

  container.add(c);

通常可以将2,3,4步写成一个addComponent方法,为这个方法传递所需要的参数,来进行添加组件的化简。

使用GridBagLayout关键在于GridBagConstraints,该类具有如下方法:

fill:设置组件如何占领空白区域,它可取如下几个值:GridBagConstraints.NONE、GridBagConstraints.HORIZONTAL、GridBagConstraints.VERTICAL、GridBagConstraints.BOTH。

gridx,gridy:设置组件的左上角所在网格的索引(网格的索引从0 开始),此外这两个值还可以设为GridBagConstraints.RELATIVE,这个值也是默认值,它表明当前组件紧跟在上一个组件之后。

gridwidht和gridheight:设置组件横向纵向跨越多少个网格,他们的默认值都是1,如果该组件是横向或纵向的最后一个还可以将此值设为GridBagConstraints.REMAINDER,若为倒数第二个组件则可以设值为GridBagConstraints.RELATIVE。

ipadx和ipady:设置组件横向纵向的内部填充大小,即在组件的最小尺寸上还需要增大多少,若设置了这个值则组件在最小尺寸的基础上增大ipadx*2或 ipady*2像素。

weightx和weighty(double类型):就是权重,也就是组件组件占领多余空间的水平或垂直增加比例,默认值为0也就是不占领多余空间。例如有三个组件,我们将他们的水平增加比例分别设为1.0,2.0,3.0,当容器宽度增加60像素时,他们分别增加10,20和30像素。如果我们希望某个组件的大小会随着容器的变化而变化,我们需要同时设置fill和weightx,weighty属性。

最后我们还可以使用绝对定位:只需要将Container的布局管理器设为null即可,也就是setLayout(null),往容器中加组件的时候指定组件的位置和大小。一般调用setBounds(int x,int y,int width,int height)。

 

猜你喜欢

转载自blog.csdn.net/weixin_42717959/article/details/81208748
今日推荐