26.6.3 学生信息界面的设计
学生信息界面主要包括显示信息的控件、添加对象的控件、删除对象的控件。在这个学生信息界面中,将学生信息界面抽象成一个类,然后让所有不同班级和不同系的学生信息系统都能调用它。
【实例26.9】下面设计学生信息的界面,代码如下所示。
01 import javax.swing.*;
02 import java.awt.*;
03 import java.awt.event.*;
04 import java.util.Vector;
05 import java.sql.*;
06 ///这是学生类信息系统的框架类
07 ///studentinfoframe是顶层窗口框架
08 ///通过八个文本域控件来分别显示不同班级、不同系的学生信息
09 ///三个按钮控件分别产生三个不同的动作事件,分别是添加、删除和更新。addition是
10 ///添加,delete是删除,update是更新
11 ///在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局
12 ///通过不同的SQL语句进入不同的班级和系的管理系统
13 ///先将数据库中的数据导入到vec中。然后再将vec中的数据导入学生类中。最后再将数据
14 ///输出
15 class studentinfo extends JPanel
16 {
17 private static final long serialVersionUID=1L;
18 static final int WIDTH=700;
19 static final int HEIGHT=400;
20 final JComboBox nameinput;
21 final JTextField codeinput;
22 final JTextField sexyinput;
23 final JTextField birthdayinput;
24 final JTextField ageinput;
25 final JTextField addressinput;
26 final JTextField gradeinput;
27 final JTextField majorinput;
28 JFrame studentinfoframe;
29 storesystem store=new storesystem();
30 Connection con=store.getConnection();
31 addframe af=new addframe();
32 public void add(Component c, GridBagConstraints constraints, int x, int y, int w, int h)
33 {
34 constraints.gridx=x;
35 constraints.gridy=y;
36 constraints.gridwidth=w;
37 constraints.gridheight=h;
38 add(c, constraints);
39 }
40 public studentinfo(String str, String sql)
41 {
42 studentinfoframe=new JFrame();
43 studentinfoframe.setTitle(str);
44 studentinfoframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
45 studentinfoframe.setSize(WIDTH, HEIGHT);
46 Toolkit kit=Toolkit.getDefaultToolkit();
47 Dimension screenSize=kit.getScreenSize();
48 int width=screenSize.width;
49 int height=screenSize.height;
50 int x=(width-WIDTH)/2;
51 int y=(height-HEIGHT)/2;
52 studentinfoframe.setLocation(x, y);
53 studentinfoframe.setVisible(true);
54 //studentinfoframe.setResizable(false);
55 studentinfoframe.add(this, BorderLayout.CENTER);
56 GridBagLayout lay=new GridBagLayout();
57 setLayout(lay);
58 JLabel name=new JLabel("姓名");
59 JLabel code=new JLabel(" 学号");
60 JLabel sexy=new JLabel(" 性别");
61 JLabel age=new JLabel(" 年龄");
62 JLabel birthday=new JLabel("出 生年月");
63 JLabel address=new JLabel(" 家庭地址");
64 JLabel grade=new JLabel("班级");
65 JLabel major=new JLabel("专业");
66 JLabel title=new JLabel(str);
67 nameinput=new JComboBox();
68 codeinput=new JTextField(10);
69 sexyinput=new JTextField(10);
70 ageinput=new JTextField(10);
71 birthdayinput=new JTextField(10);
72 addressinput=new JTextField(10);
73 gradeinput=new JTextField(10);
74 majorinput=new JTextField(10);
75 ///将存储在Vector中的数据提取出来重新赋值给学生对象。再利用学生对象中getname方法来
76 ///提取出学生 姓名来,最后使用组合列表框的添加功能将这些名字添加到列表中
77 Vector vec=store.getstudent(con, sql);
78 for(int i=0;i<vec.size();i++)
79 {
80 student one=(student)vec.get(i);
81 String nameselect=one.getname();
82 nameinput.addItem(nameselect);
83 }
84 String namestring=(String)nameinput.getSelectedItem();
85 student p=store.getobject(con, namestring);
86 String inputcode=p.getcode();
87 String inputsexy=p.getsexy();
88 String inputage=p.getage();
89 String inputbirthday=p.getbirthday();
90 String inputaddress=p.getaddress();
91 String inputgrade=p.getgrade();
92 String inputmajor=p.getmajor();
93 codeinput.setText(inputcode);
94 sexyinput.setText(inputsexy);
95 ageinput.setText(inputage);
96 birthdayinput.setText(inputbirthday);
97 addressinput.setText(inputaddress);
98 gradeinput.setText(inputgrade);
99 majorinput.setText(inputmajor);
100 JButton addition=new JButton("添加");
101 JButton delete=new JButton("删除");
102 JButton update=new JButton("更新");
103 JButton bereturn=new JButton("返回");
104 GridBagConstraints constraints=new GridBagConstraints();
105 constraints.fill=GridBagConstraints.NONE;
106 constraints.weightx=4;
107 constraints.weighty=6;
108 add(title, constraints,0,0,4,1);//使用网格组布局添加控件
109 add(name, constraints,0,1,1,1);
110 add(code, constraints,0,2,1,1);
111 add(sexy, constraints,0,3,1,1);
112 add(age, constraints,0,4,1,1);
113 add(nameinput, constraints,1,1,1,1);
114 add(codeinput, constraints,1,2,1,1);
115 add(sexyinput, constraints,1,3,1,1);
116 add(ageinput, constraints,1,4,1,1);
117 add(birthday, constraints,2,1,1,1);
118 add(address, constraints,2,2,1,1);
119 add(grade, constraints,2,3,1,1);
120 add(major, constraints,2,4,1,1);
121 add(birthdayinput, constraints,3,1,1,1);
122 add(addressinput, constraints,3,2,1,1);
123 add(gradeinput, constraints,3,3,1,1);
124 add(majorinput, constraints,3,4,1,1);
125 add(addition, constraints,0,5,1,1);
126 add(delete, constraints,1,5,1,1);
127 add(update, constraints,2,5,1,1);
128 add(bereturn, constraints,3,5,1,1);
129 ///通过单击每一个列表框中的名字,会相应地显示出此名字的所有信息
130 nameinput.addItemListener(new ItemListener()
131 {
132 public void itemStateChanged(ItemEvent e)
133 {
134 String namestring=(String)nameinput.getSelectedItem();
135 student p=store.getobject(con, namestring);
136 String inputcode=p.getcode();
137 String inputsexy=p.getsexy();
138 String inputage=p.getage();
139 String inputbirthday=p.getbirthday();
140 String inputaddress=p.getaddress();
141 String inputgrade=p.getgrade();
142 String inputmajor=p.getmajor();
143 codeinput.setText(inputcode);
144 sexyinput.setText(inputsexy);
145 ageinput.setText(inputage);
146 birthdayinput.setText(inputbirthday);
147 addressinput.setText(inputaddress);
148 gradeinput.setText(inputgrade);
149 majorinput.setText(inputmajor);
150 }
151 });
152 ///返回主菜单
153 bereturn.addActionListener(new ActionListener()
154 {
155 public void actionPerformed(ActionEvent Event)
156 {
157 studentmanageframe manageframe=new studentmanageframe();
158 manageframe.setVisible(true);
159 studentinfoframe.dispose();
1 }
161 });
162 ///进入添加主界面
163 addition.addActionListener(new ActionListener()
164 {
165 public void actionPerformed(ActionEvent Event)
166 {
167 addframe addfr=new addframe();
168 addfr.setVisible(true);
169 }
170 });
171 ///更新按钮,使得从数据库表中,将数据提取显示到界面中
172 update.addActionListener(new ActionListener()
173 {
174 public void actionPerformed(ActionEvent Event)
175 {
176 String name1=af.ss.getname();
177 String code1=af.ss.getcode();
178 String age1=af.ss.getage();
179 String sexy1=af.ss.getsexy();
180 String birthday1=af.ss.getbirthday();
181 String address1=af.ss.getaddress();
182 String grade1=af.ss.getgrade();
183 String major1=af.ss.getmajor();
184 nameinput.addItem(name1);
185 nameinput.setSelectedItem(name1);
186 codeinput.setText(code1);
187 ageinput.setText(age1);
188 sexyinput.setText(sexy1);
189 addressinput.setText(address1);
190 birthdayinput.setText(birthday1);
191 gradeinput.setText(grade1);
192 majorinput.setText(major1);
193 }
194 });
195 ///删除数据,且更新到数据库中
196 delete.addActionListener(new ActionListener()
197 {
198 public void actionPerformed(ActionEvent Event)
199 {
200 String namestring=(String)nameinput.getSelectedItem();
201 storesystem store=new storesystem();
202 try
203 {
204 Connection con=store.getConnection();
205 Statement st=con.createStatement();
206 String sql="delete*from studentinfo where='"+namestring+"'";
207 st.executeUpdate(sql);
208 }
6 0
209 catch(Exception e){}
210 nameinput.removeItem(namestring);
211 }
212 213
});
214 }
215 }
【代码说明】第42~55行创建窗口并设置窗口的各个属性。第56~128行设置标签和按钮控件等。第130~151行侦听下拉列表框的选择并作出反馈。第172~194行从数据库表提取数据并显示到界面中。第196~213行删除数据。
这样整个学生信息系统的界面就设计完毕。
【运行效果】下面运行程序,如图26.18所示。
图 26.18 学生信息系统界面
单击“添加”按钮,弹出一个对话框,这是一个框架界面。下面演示这个框架界面如何实现。
【实例26.10】设计显示信息的控件组,代码如下所示。
01 ///主运行类
02 ///main指主框架
03 ///setDefaultCloseOperation指让框架右上角的按钮都有效
04 ///show让框架能显示出来
05 import java.awt.*;
06 import java.awt.event.*;
07 import java.sql.*;
08 import java.util.Vector;
09 import javax.swing.*;
10 ///这个是学生信息系统添加信息框架类
11 ///通过八个文本域将不同信息的学生分别输出在其中
12 ///通过一个添加按钮,将数据添加到数据库中
13 ///在这里的布局是通过网格组布局管理器来设定的
14 ///在回送到信息界面时将学生对象ss设定为静态。放置新建对象时,其值会改变
15 16 class addframe extends JPanel
17 {
18 String codetext;
19 String agetext;
20 String sexytext;
21 String birthdaytext;
22 String addresstext;
23 String gradetext;
24 String majortext;
25 public final JTextField nameinput=new JTextField(10);
26 private static final long serialVersionUID=1L;
27 static final int WIDTH=700;
28 static final int HEIGHT=400;
29 static student ss;
30 JFrame studentaddframe;
31 public void add(Component c, GridBagConstraints constraints, int x, int y, int w, int h)
32 {
33 constraints.gridx=x;
34 constraints.gridy=y;
35 constraints.gridwidth=w;
36 constraints.gridheight=h;
37 add(c, constraints);
38 }
39 public addframe()
40 {
41 studentaddframe=new JFrame();
42 studentaddframe.setTitle("学生添加系统");
43 studentaddframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
44 studentaddframe.setSize(WIDTH, HEIGHT);
45 Toolkit kit=Toolkit.getDefaultToolkit();
46 Dimension screenSize=kit.getScreenSize();
47 int width=screenSize.width;
48 int height=screenSize.height;
49 int x=(width-WIDTH)/2;
50 int y=(height-HEIGHT)/2;
51 studentaddframe.setLocation(x, y);
52 studentaddframe.setVisible(true);
53 //studentaddframe.setResizable(false);
54 studentaddframe.add(this, BorderLayout.CENTER);
55 GridBagLayout lay=new GridBagLayout();
56 setLayout(lay);
57 JLabel name=new JLabel("姓名");
58 JLabel code=new JLabel(" 学号");
59 JLabel sexy=new JLabel(" 性别");
60 JLabel age=new JLabel(" 年龄");
61 JLabel birthday=new JLabel("出 生年月");
62 JLabel address=new JLabel(" 家庭地址");
63 JLabel grade=new JLabel("班级");
64 JLabel major=new JLabel("专业");
65 final JTextField codeinput=new JTextField(10);
66 final JTextField sexyinput=new JTextField(10);
67 final JTextField ageinput=new JTextField(10);
68 final JTextField birthdayinput=new JTextField(10);
69 final JTextField addressinput=new JTextField(10);
70 final JTextField gradeinput=new JTextField(10);
71 final JTextField majorinput=new JTextField(10);
72 JLabel title=new JLabel("学生被添加的基本信息");
73 JButton additionbutton=new JButton("添加");
74 GridBagConstraints constraints=new GridBagConstraints();
75 constraints.fill=GridBagConstraints.NONE;
76 constraints.weightx=4;
77 constraints.weighty=6;
78 add(title, constraints,0,0,4,1);//使用网格组布局添加控件
79 add(name, constraints,0,1,1,1);
80 add(code, constraints,0,2,1,1);
81 add(sexy, constraints,0,3,1,1);
82 add(age, constraints,0,4,1,1);
83 add(nameinput, constraints,1,1,1,1);
84 add(codeinput, constraints,1,2,1,1);
85 add(sexyinput, constraints,1,3,1,1);
86 add(ageinput, constraints,1,4,1,1);
87 add(birthday, constraints,2,1,1,1);
88 add(address, constraints,2,2,1,1);
89 add(grade, constraints,2,3,1,1);
90 add(major, constraints,2,4,1,1);
91 add(birthdayinput, constraints,3,1,1,1);
92 add(addressinput, constraints,3,2,1,1);
93 add(gradeinput, constraints,3,3,1,1);
94 add(majorinput, constraints,3,4,1,1);
95 add(additionbutton, constraints,0,5,4,1);
96 ///将每个文本域中的信息赋值给变量,再将变量以值的形式存储到数据库的表中
97 ///最后,再将这些值存储到学生对象中,并且这个学生对象是一个静态的对象
98 additionbutton.addActionListener(new ActionListener()
99 {
100 public void actionPerformed(ActionEvent Event)
101 {
102 try
103 {
104 String nametext=nameinput.getText();
105 codetext=codeinput.getText();
106 agetext=ageinput.getText();
107 sexytext=sexyinput.getText();
108 birthdaytext=birthdayinput.getText();
109 addresstext=addressinput.getText();
110 gradetext=gradeinput.getText();
111 majortext=majorinput.getText();
112 storesystem store=new storesystem();
113 Connection con=store.getConnection();
114 Statement st=con.createStatement();
115 String sql="insert into studentinfo
116 values('"+nametext+"','"+codetext+"','"+sexytext+"','"+agetext+"','"+addresstext+"','"
117+birthdaytext+"','"+gradetext+"','"+majortext+"')";
118 st.executeUpdate(sql);
119 ss=new student(nametext, codetext);
120 ss.setage(agetext);
121 ss.setsexy(sexytext);
122 ss.setaddress(addresstext);
123 ss.setbirthday(birthdaytext);
124 ss.setgrade(gradetext);
125 ss.setmajor(majortext);
126 Vector vec=new Vector();
127 vec.add(ss);
128 }
129 catch(Exception e){}
130 studentaddframe.dispose();
131 }
132 });
133 }
134 }
【代码说明】第18~30行定义一些变量和常量,为下面的操作做准备。第41~95行创建窗口,并添加窗口中的标签、按钮和文本框等。第100~131行实现添加学生到数据库的操作。
【运行效果】运行上述代码,效果如图26.19所示。
图 26.19 添加学生系统的界面
说明 添加完成后,可以去数据库看看是否已经完成了数据的添加。