思考题:利用上面的三种Layout和Panel知识写一个如下类似的Frame,Layout可以自由组合(答案不唯一)
写代码之前切记直接动手写代码,先构思,构思,构思,一般代码只用20%的时间,80%用来思考构思。
一、构思步骤.
1. 设置GridLayout(2,1);创建一个2行1列的网格,上面个的部分添加一个名为north的Panel,下面的部分添加一个名为south的Panel
2. north south 面板Panel 都设置一个 BorderLayout的布局
south 分别使用 southWest 按钮,southCenter 面板,southEast按钮(添加)
north 分别使用 northWest 按钮,northCenter 面板,northEast按钮(添加)
3. southCenter 设置网格布局 GridLayout(2,1) 2行1列
north 设置 GridLayout(2,2)网格布局,
使用对应的按钮填充
二、写代码
package GUI.Layout布局管理器;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test {
public static void main(String[] args) {
Frame frame = new Frame("习题Frame");
//一、gird(2,1)
frame.setLayout(new GridLayout(2,1,20,10));
Panel north = new Panel();
Panel south = new Panel();
frame.add(north,new GridLayout(1,1));
frame.add(south,new GridLayout(2,1));
//二、border
north.setLayout(new BorderLayout());
south.setLayout(new BorderLayout());
north.add(new Button("northWest"),BorderLayout.WEST);
north.add(new Button("northEast"),BorderLayout.EAST);
Panel northCenter = new Panel();
north.add(northCenter,BorderLayout.CENTER);
south.add(new Button("southWest"),BorderLayout.WEST);
south.add(new Button("southEast"), BorderLayout.EAST);
Panel southCenter = new Panel();
south.add(southCenter,BorderLayout.CENTER);
//三、gird
northCenter.setLayout(new GridLayout(2,1,20,20));
southCenter.setLayout(new GridLayout(2,2,20,20));
northCenter.add(new Button("northCenterr1c1"),new GridLayout(1,1));
northCenter.add(new Button("northCenterr2c1"),new GridLayout(2,1));
southCenter.add(new Button("southCenterr1c1"),new GridLayout(1,1));
southCenter.add(new Button("southCenterr1c2"),new GridLayout(1,2));
southCenter.add(new Button("southCenterr2c1"),new GridLayout(2,1));
southCenter.add(new Button("southCenterr2c2"),new GridLayout(2,2));
//set location size background
frame.setLocation(100,100);
frame.setSize(400,400);
frame.setBackground(new Color(255, 255, 255));
north.setBackground(new Color(99, 255, 240));
//set visibility.
frame.setVisible(true);
frame.setLayout(new BorderLayout());
//add closing listener.
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("exit successfully");
System.exit(0);
}
});
}
}