BoxLayout管理器
  BoxLayout类位于javax.swing包中,它可以将组件排列成一行或一列。
  使用该布局时,先创建一个放置组件的面板,然后再创建一个布局管理器,它带有2个参数:
  1.以框式布局组织的组件;
  2.BoxLayout.Y_AXIS指定垂直排列,BoxLayout.X_AXIS指定水平排列;
1 import java.awt.*;
2 import javax.swing.*;
3
4 public class Crisis extends JFrame {
5     JButton panicButton;
6     JButton dontPanicButton;
7     JButton blameButton;
8     JButton mediaButton;
9     JButton saveButton;
10
11     public Crisis() {
12         super("Crisis");
13         setLookAndFeel();
14         setSize(348, 128);
15         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16         JPanel pane = new JPanel();
17         BoxLayout box = new BoxLayout(pane, BoxLayout.Y_AXIS);
18         pane.setLayout(box);
19         panicButton = new JButton("Panic");
20         dontPanicButton = new JButton("Don't Panic");
21         blameButton = new JButton("Blame Others");
22         mediaButton = new JButton("Notify the Media");
23         saveButton  = new JButton("save yourself");
24         pane.add(panicButton);
25         pane.add(dontPanicButton);
26         pane.add(blameButton);
27         pane.add(mediaButton);
28         pane.add(saveButton);
29         add(pane);
30
31         setVisible(true);
32     }
33
34     private void setLookAndFeel() {
35         try {
36             UIManager.setLookAndFeel(
37                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
38         } catch (Exception exc) {
39             // ignore error
40         }
41     }
42
43     public static void main(String[] arguments) {
44         Crisis frame = new Crisis();
45     }
46 }
  使用Insets将组件隔开
  Insets类位于java.awt包中,它有一个接受4个参数的构造函数:在容器上、下、左、右留出的空间。每个参数都以像素为单位,像素是定义框架大小时使用的度量单位。
  1     public Insets getInsets() {
  2         Insets squeeze = new Insets(60, 15, 10, 15);
  3         return squeeze;
  4     }
  布局测试
1 import java.awt.*;
2 import javax.swing.*;
3
4 public class LottoMadness extends JFrame {
5     // set up row1
6     JPanel row1 = new JPanel();
7     ButtonGroup option = new ButtonGroup();
8     JCheckBox quickpick = new JCheckBox("Quick Pick", false);
9     JCheckBox personal  = new JCheckBox("Personal", true);
10     // set up row2
11     JPanel row2 = new JPanel();
12     JLabel numbersLabel = new JLabel("Your picks: ", JLabel.RIGHT);
13     JTextField[] numbers = new JTextField[6];
14     JLabel winnersLabel = new JLabel("Winners: ", JLabel.RIGHT);
15     JTextField[] winners = new JTextField[6];
16     // set up row3
17     JPanel row3 = new JPanel();
18     JButton stop = new JButton("Stop");
19     JButton play = new JButton("play");
20     JButton reset = new JButton("Reset");
21     // set up row4
22     JPanel row4 = new JPanel();
23     JLabel got3Label = new JLabel("3 of 6: ", JLabel.RIGHT);
24     JTextField got3 = new JTextField("0");
25     JLabel got4Label = new JLabel("4 of 6: ", JLabel.RIGHT);
26     JTextField got4 = new JTextField("0");
27     JLabel got5Label = new JLabel("5 of 6: ", JLabel.RIGHT);
28     JTextField got5 = new JTextField("0");
29     JLabel got6Label = new JLabel("6 of 6: ", JLabel.RIGHT);
30     JTextField got6 = new JTextField("0");
31     JLabel drawingsLabel = new JLabel("Drawings", JLabel.RIGHT);
32     JTextField drawings = new JTextField("0");
33     JLabel yearsLabel = new JLabel("Years: ", JLabel.RIGHT);
34     JTextField years = new JTextField();
35
36     public LottoMadness() {
37         super("Lotto Madness");
38
39         setSize(550, 400);
40         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
41         GridLayout layout = new GridLayout(5, 1, 10, 10);
42         setLayout(layout);
43
44         FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER, 10, 10);
45         option.add(quickpick);
46         option.add(personal);
47         row1.setLayout(layout1);
48         row1.add(quickpick);
49         row1.add(personal);
50         add(row1);
51
52         GridLayout layout2 = new GridLayout(2, 7, 10, 10);
53         row2.setLayout(layout2);
54         row2.add(numbersLabel);
55         for (int i = 0; i < 6; i++) {
56             numbers[i] = new JTextField();
57             row2.add(numbers[i]);
58         }
59         row2.add(winnersLabel);
60         for (int i = 0; i < 6; i++) {
61             winners[i] = new JTextField();
62             winners[i].setEditable(false);
63             row2.add(winners[i]);
64         }
65         add(row2);
66
67         FlowLayout layout3 = new FlowLayout(FlowLayout.CENTER, 10, 10);
68         row3.setLayout(layout3);
69         stop.setEnabled(false);
70         row3.add(stop);
71         row3.add(play);
72         row3.add(reset);
73         add(row3);
74
75         GridLayout layout4 = new GridLayout(2, 3, 20, 10);
76         row4.setLayout(layout4);
77         row4.add(got3Label);
78         got3.setEditable(false);
79         row4.add(got3);
80         row4.add(got4Label);
81         got4.setEditable(false);
82         row4.add(got4);
83         row4.add(got5Label);
84         got5.setEditable(false);
85         row4.add(got5);
86         row4.add(got6Label);
87         got6.setEditable(false);
88         row4.add(got6);
89         row4.add(drawingsLabel);
90         drawings.setEditable(false);
91         row4.add(drawings);
92         row4.add(yearsLabel);
93         years.setEditable(false);
94         row4.add(years);
95         add(row4);
96
97         setVisible(true);
98     }
99
100     private static void setLookAndFeel() {
101         try {
102             UIManager.setLookAndFeel(
103                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
104         } catch (Exception exc) {
105             // ignore error
106         }
107     }
108
109     public static void main(String[] arguments) {
110         LottoMadness.setLookAndFeel();
111         LottoMadness frame = new LottoMadness();
112     }
113 }