您的位置:首页 > 产品设计 > UI/UE

学习笔记之面向对象编程29(GUI编程之布局管理器)

2017-09-29 11:27 489 查看
(一)在java语言中,提供了布局管理器的对象可以管理

《1》管理Component在Container的布局,不必直接设置Component位置和大小

《2》每个Container都有一个布局管理对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。

(二)AWT提供了5种布局管理器:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout

《1》FlowLayout布局管理器

a:FlowLayout是Panel类的默认的布局管理器;

FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行

不改变组件的大小,按组件原有尺寸显示组件可设置不同的组件间距,行距以及对齐方式

b:FlowLayout布局管理器默认的对齐方式是居中

c:FlowLayout的构造方法

new FlowLayout(FlowLayout.RIGHT,20,40):右对齐,组件之间水平间距20个像素,垂直间距40个像素

new FlowLayout(FlowLayout.LEFT):左对齐,水平和垂直间距为缺省值(5)

new FlowLayout():使用缺省的剧中对齐方式,水平和垂直间距为缺省值(5)

举例如下:

import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args){
Frame f = new Frame("Frame Layout");
Button button1 = new Button("OK");
Button button2 = new Button("Open");
Button button3 = new Button("Close");
f.setLayout(new FlowLayout());
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
运行结果:



import java.awt.*;
public class TestFlowLayout2 {
public static void main(String[] args){
Frame f = new Frame("java Frame");
FlowLayout l = new FlowLayout(FlowLayout.CENTER,20,40);
f.setLayout(l);
f.setLocation(300,400);
f.setSize(300,200);
f.setBackground(new Color(204,204,255));
for(int i=1;i<=7;i++){
f.add(new Button("BUTTON"));
}
f.setVisible(true);
}
}
运行结果:



《2》BorderLayout布局管理器

a:BorderLayout是Frame类的默认布局管理器

b:BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)5个区域,组件只能被添加到指定的区域

c:如不指定组件的加入部位,则默认加入到CENTER

d:每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖

e:BorderLayout型布局容器尺寸缩放原则:南北两个区域在水平方向缩放;东西两个区域在垂直方向缩放;中部可在两个方向上缩放

举例如下:

import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args){
Frame f;
f = new Frame("hello");
Button b1 = new Button("B1");
Button b2 = new Button("B2");
Button b3 = new Button("B3");
Button b4 = new Button("B4");
Button b5 = new Button("B5");
f.add(b1,BorderLayout.NORTH);
f.add(b2, BorderLayout.SOUTH);
f.add(b3, BorderLayout.WEST);
f.add(b4, BorderLayout.EAST);
f.add(b5, BorderLayout.CENTER);
f.setSize(200,200);
f.setVisible(true);
}
}
运行结果:



《3》GirdLayout布局管理器

a:GirdLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等,组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下

b:在Gridlayout构造方法中指定分隔的行数和列书

举例如下:

import java.awt.*;
public class TestGridLayout {
public static void main(String[] args){
Frame f = new Frame("GridLayout Example");
Button b1 = new Button("b1");
Button b2 = new Button("b2");
Button b3 = new Button("b3");
Button b4 = new Button("b4");
Button b5 = new Button("b5");
Button b6 = new Button("b6");
f.setLayout(new GridLayout(3,2));
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.pack();
f.setVisible(true);
}
}


运行结果:



布局管理器总结:

1,Frame是一个顶级窗口,Frame的缺省布局管理器为 BorderLayout

2,Panel无法单独显示,必须添加到某个容器中,Panel的缺省布局管理器为FlowLayout

3,当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以直接有自己的布局管理器

4,使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用java语言提供的setLocation(),setSize(),setBounds()
9eec
等方法,则会被布局管理器覆盖

5,如果用户确实不需要亲自设置组件大小或位置,则应取消该容器的布局管理器,反复为setLayout(null)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: