GUI布局基础
布局的三种方式
东西南北中BorderLayout
布局可设置东(EAST)、西(WEST)、南(SOUTH)、北(NORTH)、中(CENTER)
- 效果图

-
代码
public static void main(String[] args) { Frame frame = new Frame("MyFrame"); frame.setBounds(100, 100, 500,500); //设置流式布局 frame.setLayout(new BorderLayout()); Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = new Button("button3"); Button button4 = new Button("button4"); Button button5 = new Button("button5"); frame.add(button1, BorderLayout.EAST); frame.add(button2, BorderLayout.WEST); frame.add(button3, BorderLayout.SOUTH); frame.add(button4, BorderLayout.NORTH); frame.add(button5, BorderLayout.CENTER); frame.setVisible(true); }
流式布局FlowLayout
流式布局可设置左(FlowLayout.LEFT)、中(FlowLayout.CENTER)、右(FlowLayout.RIGHT)
- 效果图:

代码:
public static void main(String[] args) {
Frame frame = new Frame("MyFrame");
frame.setBounds(100, 100, 500,500);
//设置流式布局
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
}
表格布局GridLayout
- 效果图:

-
代码
public static void main(String[] args) { Frame frame = new Frame("MyFrame"); frame.setBounds(100, 100, 500,500); //设置流式布局 frame.setLayout(new GridLayout(2, 3)); Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = new Button("button3"); Button button4 = new Button("button4"); Button button5 = new Button("button5"); Button button6 = new Button("button6"); frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.add(button5); frame.add(button6); frame.setVisible(true); }
使用三种方式完成以下效果

思路分析
- 复杂布局用Panel进行分割
- 把目标视图分成上下两组
- 上半部分左右中+表格
- 下半部分左右中+表格
代码
public static void main(String[] args) {
Frame frame = new Frame("MyFrame");
frame.setBounds(100, 100, 500,500);
//设置流式布局
frame.setLayout(new GridLayout(2, 1));
Panel panel_top = new Panel();
Panel panel_bottom = new Panel();
frame.add(panel_top);
frame.add(panel_bottom);
panel_top.setLayout(new BorderLayout());
panel_bottom.setLayout(new BorderLayout());
//上半部分控件
Button button_left = new Button("top_left");
Panel panel_center = new Panel();
Button button_right = new Button("top_right");
//上半部分整体布局
panel_top.add(button_left, BorderLayout.WEST);
panel_top.add(button_right, BorderLayout.EAST);
panel_top.add(panel_center, BorderLayout.CENTER);
//上半部分中间布局
panel_center.setLayout(new GridLayout(2,1));
Button button_center_top = new Button("center_top");
Button button_center_bottom = new Button("center_bottom");
panel_center.add(button_center_top);
panel_center.add(button_center_bottom);
//下半部分控件
Button b_button_left = new Button("top_left");
Panel b_panel_center = new Panel();
Button b_button_right = new Button("top_right");
panel_bottom.add(b_button_left, BorderLayout.WEST);
panel_bottom.add(b_button_right, BorderLayout.EAST);
panel_bottom.add(b_panel_center, BorderLayout.CENTER);
//上半部分中间布局
b_panel_center.setLayout(new GridLayout(2,2));
Button b_button_center_1 = new Button("b_button_center_1");
Button b_button_center_2 = new Button("b_button_center_2");
Button b_button_center_3 = new Button("b_button_center_3");
Button b_button_center_4 = new Button("b_button_center_4");
b_panel_center.add(b_button_center_1);
b_panel_center.add(b_button_center_2);
b_panel_center.add(b_button_center_3);
b_panel_center.add(b_button_center_4);
frame.setVisible(true);
}
效果图


浙公网安备 33010602011771号