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

来源:互联网 发布:淘宝视频自动播放关闭 编辑:程序博客网 时间:2024/06/05 20:49

(一)在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()等方法,则会被布局管理器覆盖

5,如果用户确实不需要亲自设置组件大小或位置,则应取消该容器的布局管理器,反复为setLayout(null)






阅读全文
0 0
原创粉丝点击