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