三个概念:组件(component) 容器(Container) 布局管理器(LayoutManager)
关系: 容器中放置组件,组件的排列方式可以通过布局管理器设置。
用户设置布局管理器后,setLocation()等方法会被布局管理器覆盖;用户想亲自设置组件大小和位置,应取消容器的布局管理器
setLayout(null);
有三种类型的容器:Window,Panel,ScrollPane
常用的有Frame,Panel,Applet
1. Frame
生成一个窗口,一般不用Window, 而是用其子类Frame。
实例化后,Frame是不可见且无大小。故需调用setSize() setVisible(true)
View Code
1 import java.awt.*;2
3 public class MyFrame extendsFrame {4 public static voidmain(String args[]) {5 MyFrame fr = new MyFrame("Hello Out There!");6
7 fr.setSize(200, 200); //设置Frame的大小, 缺省为(0 ,0)
8 fr.setBackground(Color.red); //设置Frame的背景,缺省为红色
9 fr.setVisible(true); //设置Frame为可见,缺省为不可见
10 }11
12 publicMyFrame(String str) {13 super(str); //调用父类的构造方法
14 }15 }
2. Panel
eg: 带有Panel的Frame
View Code
1 import java.awt.*;2
3 public class FrameWithPanel extendsFrame {4 publicFrameWithPanel(String str) {5 super(str);6 }7
8 public static voidmain(String args[]) {9 FrameWithPanel fr = new FrameWithPanel("Frame with pannel");10 Panel pan = newPanel();11 fr.setSize(200, 200);12 fr.setBackground(Color.red);13
14 fr.setLayout(null); //取消布局管理器
15
16 pan.setSize(100, 100);17 pan.setBackground(Color.yellow); //设置面板pan的背景颜色为黄色
18
19 fr.add(pan); //用add方法把pan面板添加到框架fr中
20
21 fr.setVisible(true);22 }23 }
3. LayoutManger布局管理器
组件的排列顺序、组件的大小、位置、当窗口移动或调整大小后组件如何变化可授权给布局管理器来管理。
不同的布局管理器其算法和策略不同。
FlowLayout
Panel和Applet的缺省布局管理器。
其规律为从上到下,从左到右放置。
容器发生变化时,组件大小不变,相对位置改变。
构造方法:
FlowLayout(FlowLayout.RIGHT, 20, 40); // 右对齐,横向间隔20,纵向间隔40
FlowLayout(FlowLayout.LEFT); // 左对齐,横向间隔、纵向间隔缺省:5
FlowLayout(); // 居中对齐,横向间隔、纵向间隔缺省:5
eg. Frame采用FlowLayout()
View Code
1 import java.awt.*;2
3 public classmyButtons {4 public static voidmain(String args[]) {5 Frame f = newFrame();6 f.setLayout(newFlowLayout());7 Button button1 = new Button("OK");8 Button button2 = new Button("Open");9 Button button3 = new Button("Close");10 f.add(button1);11 f.add(button2);12 f.add(button3);13
14 f.setSize(300, 100);15 f.setVisible(true);16 }
BorderLayout
Window, Frame和Dialog的缺省布局管理器
有5个区域:North South East West Center
容器发生变化时,组件相对位置不变,组件大小改变