分享

01布局管理器

 静听沙漏 2012-01-11
LayoutManager:管理组件的摆放(父类)
1、BorderLayout:边界布局
组件被置于容器的中、东、南、西、北的位置。
在边界布局的容器中加入组件的方法是:
add ( Component cmp , int location ) ;//其中参数location是用来指定组件加入位置的常数

BorderLayout.NORTH :容器的顶部
BorderLayout.EAST :容器的右边
BorderLayout.SOUTH :容器的底部
BorderLayout.WEST :容器的左边
BorderLayout.CENTER :容器的中部
例:
public static void main(String[] args) {
Frame frame = new Frame();?
frame.add(new Button("上"),BorderLayout.NORTH);
frame.add(new Button("下"),BorderLayout.SOUTH);
frame.add(new Button("左"),BorderLayout.WEST);
frame.add(new Button("右"),BorderLayout.EAST);
frame.add(new Button("中"),BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
拉大窗体的时候,处在center(中间)的组件就不断挤压东西南北四个方向的组件, “Button左”和“Button右”只是拉高而宽度不变,而“Button上”和“Button下”只是拉宽,而高度不变,”Button中”则是高、宽都变化 。

2、FlowLayout:流式布局
FlowLayout(流式布局)是小应用程序(Applet)和面板(Panel)的默认布局管理器。
组件自左上角开始,按照从左到右、从上到下的方式排列。
构造:
FlowLayout() :建立一个新的FlowLayout,此FlowLayout默认为居中对齐,而且组件彼此之间有5单位 的水平与垂直间距 。
FlowLayout(int align):建立一个新的FlowLayout,此FlowLayout可设置排列方式,而且组件彼此之间有5单位的水平与垂直间距 。
FlowLayout(int align , int hgap ,int vgap):建立一个新的FlowLayout,此FlowLayout可设置排列方式与组件间距 。
例:
public static void main(String[] args) {
Frame frame = new Frame();
frame.setLayout(new FlowLayout()); //将框架布局设为流式布局
frame.setBounds(100, 100, 160, 70);
Button button1 = new Button("Suivante");
frame.add(button1);?
Button button2 = new Button("Precedente");
frame.add(button2);?
frame.setVisible(true);
}
在查询每个控件的首选大小之后,布局管理器根据可用空间设置每个控件的位置。控件的定位让它们不会互相重叠。当窗口变大时, FlowLayout 在可用空间的中心重新定位控件。如果没有足够的空间并排放置控件,布局管理器会将其上下排列 。
因为控件本身的大小和位置会根据其中包含的文本而增大或缩小。如果控件对窗口来说变得太大,就会被截断;如果它变得太小,周围的就会有多余空间。
pack() 方法 :
为了防止由于窗体被调整的过小,而使控件被截断的现象发生,Window 组件提供 pack() 方法来解决这个问题 。

frame.pack();

Frame对象会调整自身大小,让其中的控件不会被剪切,即窗体保持一个最小的尺寸来防止控件被剪切。

3、GridLayout:网格布局
网格布局管理器是将组件放置到由行和列组成的网格中 。
首先,组件被加入到网格的第一行,并从最左边的单元格开始,依次向右排列。
第一行的单元格排满后,接下来的组件将加入到第二行最左边的单元格中(如果有第二行的话),并以此类推。
构造:
GridLayout():创建一个只有一行一列的缺省网格布局 。
GridLayout(int rows , int cols):创建一个有指定行数和指定烈数的网格布局 。
GridLayout(int rows , int cols , int hgap , int vgap):创建一个有指定行数和指定烈数,并指定组件之间的水平和垂直间隔的网格布局 。
例:
public static void main(String[] args) {

Frame frame = new Frame();
frame.setLayout(new GridLayout(3,3));
for(int i = 0; i < 9; i++){
frame.add(new Button(i+1+""));
}
frame.pack();
frame.setVisible(true);
}
如果将上例的设置窗体布局的语句改成以下语句:
frame.setLayout(new GridLayout(3,3,5,2)); //设置了格与格之间的距离

4、GridBagLayout:网格包布局
约束布局管理器:约束布局管理器有一个与其关联的约束对象(添加到容器中的组件)。
无论组件在何时被添加到容器中,都是通过一个约束对象来完成,这个对象可以被看成是一个布局提示。
GridBagLayout 是约束布局管理器的一个示例,它有约束对象 GridBagConstraints 。
GridBagLayout 让我们将窗口分成一系列逻辑的行和列。
GridBagConstraints对象是向 frame添加每个组件的add(Component,Object)方法的第二个参数。
GridBagConstraints类的成员变量说明:
gridx、gridy:设置组件的位置,当gridx为GridBagConstraints.RELATIVE代表此组件位于之前所加入组件的右边。若将gridy设置为GridBagConstraints.RELATIVE代表此组件位于以前所加入组件的下面。如要表示放在具体的几行几列,gridx=0,gridy=0时放在0行0列。
gridwidth、gridheight:用来设置组件所占的单位长度与高度,默认值皆为1。你可以使用
GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,而且会占据所有剩余的空间。
weightx,weighty:用来设置窗口变大时,各组件跟着变大的比例,当数字越大,表示组件能得到更多的空间,默认值皆为0。
anchor:当组件空间大于组件本身时,要将组件置于何处,有CENTER(默认值)、NORTH、
NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST可供选择。
fill:指定在单元大于组件的情况下,组件如何填充此单元。缺省为保持组件的大小。有NONE(不改变)、HORIZONTAL(水平填充显示区域)、VERTICAL(垂直填充显示区域)、BOTH(是组件填充整个显示区域)
insets:设置组件之间彼此的间距,它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。
ipadx,ipady:设置组件的最小高度和宽度,默认值为0。

5、CardLayout:卡片布局
CardLayout布局的功能就如同你有很多张卡片叠在一起,你一次只能看到其中一张卡片,但是你可以任意抽出其中一张卡片来看。
构造:
CardLayout() 创建一个只有一行一列的缺省网格布局 。
CardLayout(int hgap ,int vgap) 创建一个有指定行数和指定烈数,并指定组件之间的水平和垂直间隔的网格布局 。

实现CardLayou的过程:
定义面板,为各个面板设置不同的布局,并根据需要在每个面板中放置组件。
Panel1.setLayout ( new FlowLayout () );
Panel2.setLayout ( new BorderLayout () );
将主面板的布局设为:CardLayout。
CardLayout card = new Cardlayout();
PanelMain.setLayout ( new CardLayout() );
将作为卡片的面板添加到主面板。
(Add的第一个参数是给卡片指定标题)
PanelMain.add ( “第一张卡片”, panel1 );
PanelMain.add ( “第二张卡片”, panel2 );
供在卡片之间进行选择的方法。通常的方法是在由某种事件引起的行为中中决定显示哪张卡片。(如按钮单击事件)
(书中示例2-8提供了一个比较复杂的示例,需要仔细研读)

6、null:空布局
窗口改变大小,内容不变
组件方法:
setBounds(x,y,宽,高); //设置组件位置、大小
this.setLayout(null); //设为空布局
lable.setOpaque(true); //标签背景设为不透明,默认透明

来自: http://hi.baidu.com/xgrils/blog/item/4ee482eeb90422f2b2fb9583.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多