22.11 通过实例熟悉Swing编程
【实例22.16】本小节给出一个综合实例,希望读者能够真正掌握如何使用Swing编程。
01 import java.awt.*;
02 import javax.swing.*;
03 ///主运行类
04 ///frame1指主框架
05 ///setDefaultCloseOperation指让框架右上角的按钮都有效
06 ///show让框架能显示出来
07 public class Swingtest15
08 {
09 public static void main(String[]args)
10 {
11 gridbaglayoutframe frame1=new gridbaglayoutframe();
12 frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
13 frame1.show();
14 }
15 }
16 ///创建一个顶层框架类
17 ///WIDTH参数是指框架的宽度
18 ///HEIGHT参数是指框架的长度
19 class gridbaglayoutframe extends JFrame
20 {
21 private static final int WIDTH=300;
22 private static final int HEIGHT=200;
23 ///顶层框架的构造器
24 ///setTitle用来设置框架左上角的标题
25 ///setSize用来设置框架的大小
26 ///设置一个容器类的对象con
27 ///通过容器类对象进行添加控件,这里的控件是以类的对象形式出现的
28 public gridbaglayoutframe()
29 {
30 setTitle("学生管理系统");
31 setSize(WIDTH, HEIGHT);
32 Container con=getContentPane();
33 con.add(new studentJPanel(),BorderLayout.CENTER);
34 con.add(new buttonpanel(),BorderLayout.SOUTH);
35 }
36 }
37 ///创建一个学生标签和文本域及文本区所在的容器类
38 class studentJPanel extends JPanel
39 {
40 ///此容器类的构造器
41 ///namelabel标签是指显示为"姓名"的标签
42 ///codelabel标签是指显示为" 学号"的标签
43 ///sexlabel标签是指显示为" 性别"的标签
44 ///addresslabel标签是指显示为"籍贯"的标签
45 ///commentlabel标签是指显示为"简单介绍"的标签
46 ///nametextfield文本域是指显示姓名的文本域
47 //codetextfield文本域是指显示 学号的文本域
48 ///sextextfield文本域是指显示 性别的文本域
49 //addressCombo文本域是指显示地点的组合列表框
50 //commenttextfield文本域是指显示简单介绍的文本区
51 ///Constraints表示创建一个网格组布局管理器对象
52 ///add方法是添加组件的函数,在后面有这个函数的具体内容
53 ///constraints.fill和constraints.anchor指定了控件的摆放方式
54 ///constraints.weightx和constraints.weighty分别是指控件在容器中总共需要占据多少行与列
55 public studentJPanel()
56 {
57 GridBagLayout layout=new GridBagLayout();
58 setLayout(layout);
59 JLabel namelabel=new JLabel("姓名:");
60 JTextField nameTextField=new JTextField(10);
61 JLabel codelabel=new JLabel(" 学号:");
62 JTextField codeTextField=new JTextField(10);
63 JLabel sexlabel=new JLabel(" 性别:");
64 JTextField sexTextField=new JTextField(10);
65 JLabel addresslabel=new JLabel("籍贯:");
66 JComboBox addressCombo=new JComboBox(new String[]{"江西","四川","山西",
67 "湖北","湖南","海南"});
68 JLabel commentLabel=new JLabel("简单介绍");
69 JTextArea sample=new JTextArea();
70 sample.setLineWrap(true);
71 GridBagConstraints constraints=new GridBagConstraints();
72 constraints.fill=GridBagConstraints.NONE;
73 constraints.anchor=GridBagConstraints.EAST;
74 constraints.weightx=5;
75 constraints.weighty=5;
76 add(namelabel, constraints,0,0,1,1);
77 add(codelabel, constraints,0,1,1,1);
78 add(sexlabel, constraints,0,2,1,1);
79 add(addresslabel, constraints,0,3,1,1);
80 constraints.fill=GridBagConstraints.HORIZONTAL;
81 constraints.weightx=100;
82 add(nameTextField, constraints,1,0,1,1);
83 add(codeTextField, constraints,1,1,1,1);
84 add(sexTextField, constraints,1,2,1,1);
85 add(addressCombo, constraints,1,3,1,1);
86 constraints.fill=GridBagConstraints.NONE;
87 constraints.anchor=GridBagConstraints.CENTER;
88 add(sample, constraints,2,0,1,1);
89 constraints.fill=GridBagConstraints.BOTH;
90 add(sample, constraints,2,1,1,1);
91 }
92 ///用来添加组件到容器中的函数
93 ///constraints.gridx指该控件位于哪一列
94 ///constraints.gridy指该控件位于哪一行
95 ///constraints.gridwidth指该控件占据多少列
96 ///constraints.gridheight指该控件占据多少行
97 public void add(Component c, GridBagConstraints constraints, int x, int y, int w, int h)
98 {
99 constraints.gridx=x;
100 constraints.gridy=y;
101 constraints.gridwidth=w;
102 constraints.gridheight=h;
103 add(c, constraints);
104 }
105 }
106 ///一个放置按钮控件的容器类
107 ///okbutton是指确定按钮
108 ///cancelbutton是指取消按钮
109 ///hBox指箱式控制器中的空白条之类的东西
110 class buttonpanel extends JPanel
111 {
112 public buttonpanel()
113 {
114 setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
115 JButton okbutton=new JButton("确定");
116 JButton cancelbutton=new JButton("取消");
117 Box hBox=Box.createHorizontalBox();
118 hBox.add(Box.createHorizontalStrut(40));
119 hBox.add(okbutton);
120 hBox.add(Box.createHorizontalGlue());
121 hBox.add(cancelbutton);
122 hBox.add(Box.createHorizontalStrut(40));
123 add(hBox);
124 }
125 }
【代码说明】第1 9~3 6行创建一个顶层框架类gridbaglayoutframe,并继承自JFrame。第38~105行创建一个学生标签和文本域及文本区所在的容器类。第110~125行创建一个放置按钮的容器类。
图 22.17 使用网格组布局管理器的综合实例
【运行效果】运行结果如图22.17所示。