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