Java学习——用户界面的布局

使用布局管理器

  FlowLayout管理器

  面板的默认布局管理器是java.awt包中的FlowLayout类。使用FlowLayout时,像在页面中排列英文单词那样排组件:从左到右排列,当前行没有空间后进入下一行。

 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 //        1.默认布局
17         FlowLayout flo = new FlowLayout();
18         setLayout(flo);
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         add(panicButton);
25         add(dontPanicButton);
26         add(blameButton);
27         add(mediaButton);
28         add(saveButton);
29         setVisible(true);
30     }
31     
32     private void setLookAndFeel() {
33         try {
34             UIManager.setLookAndFeel(
35                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
36         } catch (Exception exc) {
37             // ignore error
38         }
39     }
40 
41     public static void main(String[] arguments) {
42         Crisis frame = new Crisis();
43     }
44 }
View Code

  GridLayout管理器

  GridLayout类位于java.awt包中,它将容器中所有的组件组织为指定的行数和列数。分配给每个组件的显示区域都相同。

  当组件加入到容器中时,GridLayout将所有的组件放置到网格中的某个位置,而且组件是从左到右依次添加,当这一行满了之后,在从下一行的最左边开始添加。

 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 
17 //        2.GridLayout布局
18         GridLayout grid = new GridLayout(2, 3);
19         setLayout(grid);
20         panicButton = new JButton("Panic");
21         dontPanicButton = new JButton("Don't Panic");
22         blameButton = new JButton("Blame Others");
23         mediaButton = new JButton("Notify the Media");
24         saveButton  = new JButton("save yourself");
25         add(panicButton);
26         add(dontPanicButton);
27         add(blameButton);
28         add(mediaButton);
29         add(saveButton);
30         setVisible(true);
31     }
32     
33     private void setLookAndFeel() {
34         try {
35             UIManager.setLookAndFeel(
36                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
37         } catch (Exception exc) {
38             // ignore error
39         }
40     }
41 
42     public static void main(String[] arguments) {
43         Crisis frame = new Crisis();
44     }
45 }
View Code

BorderLay管理器

  BorderLayout类也位于java.awt包中,它将容器中的组件放置在特定的位置,该位置有5个方位:东、西、南、北、中。

BorderLayout管理器将组件放置到5个位置:其中4个位置由罗盘方向指定,另外一个由中心区域指定。当在该布局下添加组件时,add()方法会包含第2个参数,用于指示组件应该放置的位置。该参数应该是BorderLayout类的5个类变量之一:NORTH、SOUTH、EAST、WEST和CENTER。

  与GridLayout类相同,BorderLayout也会将所有可用空间都分配给组件。在周围放置4个边界组件后,余下的空间都分配给中央的组件,因此它通常是最大的。

 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         BorderLayout crisisLayout = new BorderLayout();
17         setLayout(crisisLayout);
18 
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         add(panicButton, BorderLayout.NORTH);
25         add(dontPanicButton, BorderLayout.SOUTH);
26         add(blameButton, BorderLayout.EAST);
27         add(mediaButton, BorderLayout.WEST);
28         add(saveButton, BorderLayout.CENTER);
29         setVisible(true);
30     }
31     
32     private void setLookAndFeel() {
33         try {
34             UIManager.setLookAndFeel(
35                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
36         } catch (Exception exc) {
37             // ignore error
38         }
39     }
40 
41     public static void main(String[] arguments) {
42         Crisis frame = new Crisis();
43     }
44 }
View Code

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 }
View Code

使用Insets将组件隔开

  Insets类位于java.awt包中,它有一个接受4个参数的构造函数:在容器上、下、左、右留出的空间。每个参数都以像素为单位,像素是定义框架大小时使用的度量单位。

1     public Insets getInsets() {
2         Insets squeeze = new Insets(60, 15, 10, 15);
3         return squeeze;
4     }
View Code

 布局测试

  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 }
View Code

     

 

posted @ 2017-03-02 00:44  独立小桥风满袖  阅读(733)  评论(0编辑  收藏  举报