针对我们之前留下的作业来说,当缩放外层Frame窗口的大小时,内层Panel并不会随之改变大小,所以我们需要一个事件监听,让他能够随之改变,但是这样太麻烦了,于是Java给我们提供了一个布局管理器类,这个布局管理器举个例子相当于一个大管家,房子相当于Frame,其中的家具就相当于Frame里的元素,我们只管把元素往Frame里丢,不用管怎么排列,大管家自动帮我们排列。不同的布局管理器有不同的风格
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame f = new Frame("Flow Layout");
Button b1 = new Button("Ok");
Button b2 = new Button("Open");
Button b3 = new Button("Close");
f.setLayout(new FlowLayout());
f.add(b1);
f.add(b2);
f.add(b3);
f.setSize(400,400);
f.setBackground(Color.red);
f.setVisible(true);
}
}
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args) {
Frame f;
f = new Frame("Test BorderLayout");
Button bn = new Button("bn");
Button bs = new Button("bs");
Button bw = new Button("bw");
Button be = new Button("be");
Button bc = new Button("bc");
/*
f.add(bn,"north");
f.add(bs,"south");
f.add(bw,"west");
f.add(be,"east");
f.add(bc,"center");
*/
f.add(bn,BorderLayout.NORTH);
f.add(bs,BorderLayout.SOUTH);
f.add(bw,BorderLayout.WEST);
f.add(be,BorderLayout.EAST);
f.add(bc,BorderLayout.CENTER);
f.setSize(500,500);
f.setVisible(true);
}
}
不建议用注释内的方法,因为一旦写错,编译不会报错,运行时会报错
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args) {
Frame f = new Frame("Test GridLayout");
for(int i = 1;i <= 6;i++)
f.add(new Button("B" + i));
f.setLayout(new GridLayout(3,2));
f.pack();
f.setVisible(true);
}
}
pack方法是使得Frame窗口刚好包住其中的元素的大小
做出下图所示的窗口界面
import java.awt.*;
public class TenButtons {
public static void main(String[] args) {
Frame f = new Frame("Java Frame");
f.setLayout(new GridLayout(2,1));
f.setLocation(300,400);
f.setSize(400,400);
f.setBackground(Color.red);
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new BorderLayout());
Panel p11 = new Panel(new GridLayout(2,1));
Panel p22 = new Panel(new GridLayout(2,2));
p1.add(new Button("Button"),BorderLayout.WEST);
p1.add(new Button("Button"),BorderLayout.EAST);
p11.add(new Button("Button"));
p11.add(new Button("Button"));
p1.add(p11,BorderLayout.CENTER);
p2.add(new Button("Button"),BorderLayout.WEST);
p2.add(new Button("Button"),BorderLayout.EAST);
for(int i = 1;i <= 4;i++)
p22.add(new Button("Button"));
p2.add(p22,BorderLayout.CENTER);
f.add(p1);
f.add(p2);
f.setVisible(true);
}
}