项目结构:
运行效果:
========================================================
代码部分:
========================================================
/shutdownApp/src/com/b510/examples/Shutdown.java
1 package com.b510.examples;
2
3 import com.b510.examples.window.dao.MyWindowDao;
4 import com.b510.examples.window.impl.MyWindowImpl;
5
6 /**
7 * @author Hongten
8 *
9 * @time 2011-9-3 2011
10 */
11 public class Shutdown {
12 public static void main(String[] args) {
13 @SuppressWarnings("unused")
14 MyWindowDao dao=new MyWindowImpl("Hongten-v1.0.定时关机");
15 }
16 }
/shutdownApp/src/com/b510/examples/window/component/MyBox.java
1 package com.b510.examples.window.component;
2
3 import javax.swing.Box;
4
5 /**
6 * @author Hongten
7 *
8 * @time 2011-9-5 2011
9 */
10 public class MyBox {
11 Box left=Box.createVerticalBox();
12 Box center=Box.createVerticalBox();
13 Box right=Box.createVerticalBox();
14 Box middle_part=Box.createHorizontalBox();
15 /**
16 * @return the left
17 */
18 public Box getLeft() {
19 return left;
20 }
21 /**
22 * @param left the left to set
23 */
24 public void setLeft(Box left) {
25 this.left = left;
26 }
27 /**
28 * @return the center
29 */
30 public Box getCenter() {
31 return center;
32 }
33 /**
34 * @param center the center to set
35 */
36 public void setCenter(Box center) {
37 this.center = center;
38 }
39 /**
40 * @return the right
41 */
42 public Box getRight() {
43 return right;
44 }
45 /**
46 * @param right the right to set
47 */
48 public void setRight(Box right) {
49 this.right = right;
50 }
51 /**
52 * @return the middle_part
53 */
54 public Box getMiddle_part() {
55 return middle_part;
56 }
57 /**
58 * @param middlePart the middle_part to set
59 */
60 public void setMiddle_part(Box middlePart) {
61 middle_part = middlePart;
62 }
63
64
65 }
/shutdownApp/src/com/b510/examples/window/component/MyButton.java
1 package com.b510.examples.window.component;
2
3 import javax.swing.JButton;
4
5 /**
6 * @author Hongten
7 *
8 * @time 2011-9-5 2011
9 */
10 public class MyButton {
11 JButton shutdown = new JButton("关机");
12 JButton restart = new JButton("重启");
13 JButton logout = new JButton("注销");
14 JButton clear = new JButton("清零");
15 JButton cancel = new JButton("取消");
16 JButton immshutdown = new JButton("立刻关机");
17
18 /**
19 * @return the shutdown
20 */
21 public JButton getShutdown() {
22 return shutdown;
23 }
24
25 /**
26 * @param shutdown
27 * the shutdown to set
28 */
29 public void setShutdown(JButton shutdown) {
30 this.shutdown = shutdown;
31 }
32
33 /**
34 * @return the restart
35 */
36 public JButton getRestart() {
37 return restart;
38 }
39
40 /**
41 * @param restart
42 * the restart to set
43 */
44 public void setRestart(JButton restart) {
45 this.restart = restart;
46 }
47
48 /**
49 * @return the logout
50 */
51 public JButton getLogout() {
52 return logout;
53 }
54
55 /**
56 * @param logout
57 * the logout to set
58 */
59 public void setLogout(JButton logout) {
60 this.logout = logout;
61 }
62
63 /**
64 * @return the clear
65 */
66 public JButton getClear() {
67 return clear;
68 }
69
70 /**
71 * @param clear
72 * the clear to set
73 */
74 public void setClear(JButton clear) {
75 this.clear = clear;
76 }
77
78 /**
79 * @return the cancel
80 */
81 public JButton getCancel() {
82 return cancel;
83 }
84
85 /**
86 * @param cancel
87 * the cancel to set
88 */
89 public void setCancel(JButton cancel) {
90 this.cancel = cancel;
91 }
92
93 /**
94 * @return the immshutdown
95 */
96 public JButton getImmshutdown() {
97 return immshutdown;
98 }
99
100 /**
101 * @param immshutdown
102 * the immshutdown to set
103 */
104 public void setImmshutdown(JButton immshutdown) {
105 this.immshutdown = immshutdown;
106 }
107
108 }
/shutdownApp/src/com/b510/examples/window/component/MyLabel.java
1 package com.b510.examples.window.component;
2
3 import javax.swing.JLabel;
4
5 /**
6 * @author Hongten
7 *
8 * @time 2011-9-5 2011
9 */
10 public class MyLabel {
11 // 标签 现在时间 ,设置小时,设置分钟,设置秒钟,概念,工作室,剩余
12 JLabel time_now = new JLabel();
13 JLabel set_hour = new JLabel("设置小时");
14 JLabel set_min = new JLabel("设置分钟");
15 JLabel set_sec = new JLabel("设置秒钟");
16 JLabel concept = new JLabel("Hongten-B510");
17 JLabel workspace = new JLabel("Hongtenzone@foxmain.com");
18 JLabel surplus = new JLabel();
19
20 /**
21 * @return the time_now
22 */
23 public JLabel getTime_now() {
24 return time_now;
25 }
26
27 /**
28 * @param timeNow
29 * the time_now to set
30 */
31 public void setTime_now(JLabel timeNow) {
32 time_now = timeNow;
33 }
34
35 /**
36 * @return the set_hour
37 */
38 public JLabel getSet_hour() {
39 return set_hour;
40 }
41
42 /**
43 * @param setHour
44 * the set_hour to set
45 */
46 public void setSet_hour(JLabel setHour) {
47 set_hour = setHour;
48 }
49
50 /**
51 * @return the set_min
52 */
53 public JLabel getSet_min() {
54 return set_min;
55 }
56
57 /**
58 * @param setMin
59 * the set_min to set
60 */
61 public void setSet_min(JLabel setMin) {
62 set_min = setMin;
63 }
64
65 /**
66 * @return the set_sec
67 */
68 public JLabel getSet_sec() {
69 return set_sec;
70 }
71
72 /**
73 * @param setSec
74 * the set_sec to set
75 */
76 public void setSet_sec(JLabel setSec) {
77 set_sec = setSec;
78 }
79
80 /**
81 * @return the concept
82 */
83 public JLabel getConcept() {
84 return concept;
85 }
86
87 /**
88 * @param concept
89 * the concept to set
90 */
91 public void setConcept(JLabel concept) {
92 this.concept = concept;
93 }
94
95 /**
96 * @return the workspace
97 */
98 public JLabel getWorkspace() {
99 return workspace;
100 }
101
102 /**
103 * @param workspace
104 * the workspace to set
105 */
106 public void setWorkspace(JLabel workspace) {
107 this.workspace = workspace;
108 }
109
110 /**
111 * @return the surplus
112 */
113 public JLabel getSurplus() {
114 return surplus;
115 }
116
117 /**
118 * @param surplus
119 * the surplus to set
120 */
121 public void setSurplus(JLabel surplus) {
122 this.surplus = surplus;
123 }
124
125 }
/shutdownApp/src/com/b510/examples/window/component/MyPanel.java
1 package com.b510.examples.window.component;
2
3 import javax.swing.JPanel;
4
5 /**
6 * @author Hongten
7 *
8 * @time 2011-9-5 2011
9 */
10 public class MyPanel {
11 JPanel buttom=new JPanel();
12
13 /**
14 * @return the buttom
15 */
16 public JPanel getButtom() {
17 return buttom;
18 }
19
20 /**
21 * @param buttom the buttom to set
22 */
23 public void setButtom(JPanel buttom) {
24 this.buttom = buttom;
25 }
26
27 }
/shutdownApp/src/com/b510/examples/window/component/MyTextField.java
1 package com.b510.examples.window.component;
2
3 import javax.swing.JTextField;
4
5 /**
6 * @author Hongten
7 *
8 * @time 2011-9-5 2011
9 */
10 public class MyTextField {
11 // 文本框 时,分,秒
12 static JTextField hour = new JTextField(10);
13 static JTextField min = new JTextField(10);
14 static JTextField sec = new JTextField(10);
15
16 /**
17 * @return the hour
18 */
19 public JTextField getHour() {
20 return hour;
21 }
22
23 /**
24 * @param hour
25 * the hour to set
26 */
27 public void setHour(JTextField hour) {
28 MyTextField.hour = hour;
29 }
30
31 /**
32 * @return the min
33 */
34 public JTextField getMin() {
35 return min;
36 }
37
38 /**
39 * @param min
40 * the min to set
41 */
42 public void setMin(JTextField min) {
43 MyTextField.min = min;
44 }
45
46 /**
47 * @return the sec
48 */
49 public JTextField getSec() {
50 return sec;
51 }
52
53 /**
54 * @param sec
55 * the sec to set
56 */
57 public void setSec(JTextField sec) {
58 MyTextField.sec = sec;
59 }
60
61 }
/shutdownApp/src/com/b510/examples/window/dao/MyWindowDao.java
1 package com.b510.examples.window.dao;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2011-9-5 2011
7 */
8 public interface MyWindowDao {
9
10 /**
11 * 得到系统时间并显示 设置在窗体头部的信息
12 *
13 * @return
14 */
15 public String now();
16
17 /**
18 * 得到剩余时间并显示
19 *
20 * @return
21 */
22 public String surplus_time();
23
24 /**
25 * 关机操作
26 */
27 public void shutDown();
28
29 /**
30 * 重启操作
31 */
32 public void restart();
33
34 /**
35 * 注销操作
36 */
37 public void logOut();
38
39 /**
40 * 取消操作
41 */
42 public void cancel();
43
44 /**
45 * 我们先设置好时间,一旦时间一到, 就调用此方法 该方法中可以实现关机,重启,注销等操作
46 */
47 public void thenExecutive();
48
49 /**
50 * 自己定义的监听器类, 监听我们设置的关机或重启或注销时间是否到时了 如果到时,就执行相应的动作(关机或重启或注销)
51 */
52 public void myListener();
53
54 /**
55 * 时间监听器,得到系统时间和设置好时间后,得到剩余时间
56 */
57 public void timeListener();
58
59 /**
60 * 要执行的动作
61 */
62 public void myAction();
63
64 /**
65 * 判断三个文本域(hour,min,sec)中的时间是否合法
66 *
67 * @return
68 */
69
70 public boolean judgeTime();
71
72 /**
73 * 判断是否为纯数字,如果是返回true,否则返回false
74 *
75 * @param str
76 * 为一个String类型
77 * @return
78 */
79 public boolean isAllNumber(String str);
80 }
/shutdownApp/src/com/b510/examples/window/dao/MyWindowLayoutDao.java
1 package com.b510.examples.window.dao;
2
3 /**
4 * @author Hongten
5 *
6 * @time 2011-9-5 2011
7 */
8 public interface MyWindowLayoutDao {
9 /**
10 * 所有文本域属性设置
11 */
12 public void setTextFieldAddListener();
13
14 /**
15 * 所有的JLabel属性设置
16 */
17 public void setLabel();
18
19 /**
20 * 所有的JButton属性设置
21 */
22 public void setButtonAddListener();
23
24 /**
25 * 窗体布局设置
26 */
27 public void setLayout();
28 }
/shutdownApp/src/com/b510/examples/window/dao/SetMyLayoutDao.java
1 package com.b510.examples.window.dao;
2
3 import com.b510.examples.window.component.MyLabel;
4 import com.b510.examples.window.component.MyTextField;
5
6 /**
7 * @author Hongten
8 *
9 * @time 2011-9-5 2011
10 */
11 public interface SetMyLayoutDao {
12 /**
13 * 三个文本域(hour,min,sec)属性的相关设置
14 */
15 public void setTextField(MyTextField myTextField);
16 /**
17 * 所有的JLabel属性设置
18 */
19 public void setLabel(MyLabel myLabel);
20 }
/shutdownApp/src/com/b510/examples/window/impl/MyWindowImpl.java
这个是小程序的主要功能类,不过在时间处理方面不是很完善
不过在之后的小闹钟程序中就得以完善了,大家可以看看小闹钟程序的时间处理:
http://www.cnblogs.com/hongten/archive/2012/06/02/java_alarm.html
1 package com.b510.examples.window.impl;
2
3 import java.awt.BorderLayout;
4 import java.awt.Color;
5 import java.awt.Container;
6 import java.awt.Dimension;
7 import java.awt.GridLayout;
8 import java.awt.Toolkit;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11 import java.io.IOException;
12 import java.util.Calendar;
13 import java.util.GregorianCalendar;
14
15 import javax.swing.Box;
16 import javax.swing.JFrame;
17 import javax.swing.JOptionPane;
18 import javax.swing.event.DocumentEvent;
19 import javax.swing.event.DocumentListener;
20
21 import com.b510.examples.window.component.MyBox;
22 import com.b510.examples.window.component.MyButton;
23 import com.b510.examples.window.component.MyLabel;
24 import com.b510.examples.window.component.MyPanel;
25 import com.b510.examples.window.component.MyTextField;
26 import com.b510.examples.window.dao.MyWindowDao;
27 import com.b510.examples.window.dao.MyWindowLayoutDao;
28 import com.b510.examples.window.dao.SetMyLayoutDao;
29
30 /**
31 * @author Hongten
32 *
33 * @time 2011-9-3 2011
34 */
35 public class MyWindowImpl extends JFrame implements ActionListener,
36 DocumentListener, MyWindowDao, MyWindowLayoutDao {
37 private static final long serialVersionUID = -7018374117422042620L;
38
39 MyTextField myTextField = new MyTextField();
40 MyLabel myLabel = new MyLabel();
41 MyButton myButton = new MyButton();
42 MyBox myBox = new MyBox();
43 MyPanel buttom = new MyPanel();
44 Container container;
45 int flag;
46
47 public MyWindowImpl(String title) {
48 super(title);// 设置标题
49 init();
50 }
51
52 /**
53 * 初始化窗体
54 */
55 public void init() {
56 this.setVisible(true);
57 this.setResizable(false);// 设置大小不可变
58 this.setSize(525, 215);
59 Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
60 this.setLocation(screen.width - 525, 0);// 设置窗体的初始位置
61 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗体可以关闭
62 SetMyLayoutDao setMyLayout = new SetMyLayoutImpl();
63 setLabel();// JLabel标签属性设置
64 timeListener();// 系统时间监听器
65 setMyLayout.setTextField(myTextField);
66 setMyLayout.setLabel(myLabel);
67 setTextFieldAddListener();// JTextField文本域属性设置
68 setButtonAddListener();// JButton按钮属性设置
69 setLayout();// 窗体布局设置
70 }
71
72 /**
73 * 设置文本域的监听器
74 */
75 public void setTextFieldAddListener() {
76 // 注入监听器
77 myTextField.getHour().addActionListener(this);
78 (myTextField.getHour().getDocument()).addDocumentListener(this);
79
80 // 注入监听器
81 myTextField.getMin().addActionListener(this);
82 (myTextField.getMin().getDocument()).addDocumentListener(this);
83
84 // 注入监听器
85 myTextField.getSec().addActionListener(this);
86 (myTextField.getSec().getDocument()).addDocumentListener(this);
87
88 }
89
90 /**
91 * 所有的JLabel属性设置
92 */
93 public void setLabel() {
94 // 现在时间 头部显示
95 myLabel.getTime_now().setText("SystemTime:" + now());
96 }
97
98 /**
99 * 所有的JButton属性设置
100 */
101 public void setButtonAddListener() {
102 // 设置按钮的一些属性,可用,添加监听器
103 myButton.getShutdown().setEnabled(false);// 关机
104 myButton.getShutdown().addActionListener(this);
105 myButton.getRestart().setEnabled(false);// 重启
106 myButton.getRestart().addActionListener(this);
107 myButton.getLogout().setEnabled(false);// 注销
108 myButton.getLogout().addActionListener(this);
109 myButton.getClear().setEnabled(false);// 清零
110 myButton.getClear().addActionListener(this);
111 myButton.getCancel().setEnabled(false);// 取消
112 myButton.getCancel().addActionListener(this);
113 myButton.getImmshutdown().addActionListener(this);// 立刻关机
114 }
115
116 /**
117 * 窗体布局设置
118 */
119 public void setLayout() {
120 // 左边布局
121 myBox.getLeft().add(myLabel.getSet_hour());
122 myBox.getLeft().add(Box.createVerticalStrut(20));
123 myBox.getLeft().add(myLabel.getSet_min());
124 myBox.getLeft().add(Box.createVerticalStrut(20));
125 myBox.getLeft().add(myLabel.getSet_sec());
126 // 中间布局
127
128 myBox.getCenter().add(myTextField.getHour());
129 myBox.getCenter().add(Box.createVerticalStrut(9));
130 myBox.getCenter().add(myTextField.getMin());
131 myBox.getCenter().add(Box.createVerticalStrut(9));
132 myBox.getCenter().add(myTextField.getSec());
133
134 // 右边布局
135 myBox.getRight().add(myButton.getShutdown());
136 myBox.getRight().add(Box.createVerticalStrut(10));
137 myBox.getRight().add(myButton.getRestart());
138 myBox.getRight().add(Box.createVerticalStrut(10));
139 myBox.getRight().add(myButton.getLogout());
140 validate();
141 // 中部
142 myBox.getMiddle_part().add(myBox.getLeft());
143 myBox.getMiddle_part().add(Box.createHorizontalStrut(5));
144 myBox.getMiddle_part().add(myBox.getCenter());
145 myBox.getMiddle_part().add(Box.createHorizontalStrut(5));
146 myBox.getMiddle_part().add(myBox.getRight());
147 myBox.getMiddle_part().validate();
148 // 底部
149 buttom.getButtom().setLayout(new GridLayout(2, 3));// 采用网格布局 2行 ,3列
150 buttom.getButtom().setBackground(Color.white);
151 buttom.getButtom().add(myButton.getClear());
152 buttom.getButtom().add(myButton.getCancel());
153 buttom.getButtom().add(myButton.getImmshutdown());
154 buttom.getButtom().add(myLabel.getConcept());
155 buttom.getButtom().add(myLabel.getSurplus());
156 buttom.getButtom().add(myLabel.getWorkspace());
157 buttom.getButtom().validate();
158 // 容器
159 container = getContentPane();
160 container.setLayout(new BorderLayout());
161 container.add(myLabel.getTime_now(), BorderLayout.NORTH);
162 container.add(myBox.getMiddle_part(), BorderLayout.CENTER);
163 container.add(buttom.getButtom(), BorderLayout.SOUTH);
164 container.setBackground(Color.white);
165 container.validate();
166 }
167
168 /**
169 * 得到系统时间并显示 设置在窗体头部的信息
170 *
171 * @return
172 */
173 public String now() {
174 Calendar cal = Calendar.getInstance();
175 int year = cal.get(Calendar.YEAR);
176 int month = cal.get(Calendar.MONTH) + 1;
177 int day = cal.get(Calendar.DAY_OF_MONTH);
178 int hour = cal.get(Calendar.HOUR_OF_DAY);
179 int min = cal.get(Calendar.MINUTE);
180 int sec = cal.get(Calendar.SECOND);
181 String current = new String(year + "-" + month + "-" + day + " " + hour
182 + ":" + min + ":" + sec);
183 myLabel.getTime_now().setText("SystemTime:" + current);
184 return current;
185 }
186
187 /**
188 * 得到剩余时间并显示
189 *
190 * 由于我们的文本域(hour,min,sec)都有客户端直接输入,可能输入的不是纯数字 这样我们在监听的时候, 比如:Integer
191 * int_hour = Integer.parseInt(hour.getText()); 就会报错,为了解决这个错误,我们制定了以下方法,
192 * 判断文本域中的内容是否为纯数字,如果不是,则出现提示信息, 并且将文本内容设置为当前相应的时间
193 *
194 * @return
195 */
196 public String surplus_time() {
197 Calendar cal = Calendar.getInstance();// new GregorianCalendar();
198 int sur_hour = cal.get(Calendar.HOUR_OF_DAY);
199 int sur_min = cal.get(Calendar.MINUTE);
200 int sur_sec = cal.get(Calendar.SECOND);
201 if (!isAllNumber(myTextField.getHour().getText())) {
202 JOptionPane.showMessageDialog(this,
203 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
204 JOptionPane.WARNING_MESSAGE);
205 myTextField.getHour().setText(String.valueOf(sur_hour));// 设置当前小时
206 myTextField.getHour().requestFocus(); // 文本框 时 获得焦点
207 return null;
208 } else if (!isAllNumber(myTextField.getMin().getText())) {
209 JOptionPane.showMessageDialog(this,
210 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
211 JOptionPane.WARNING_MESSAGE);
212 myTextField.getMin().setText(String.valueOf(sur_min));// 设置当前分钟
213 myTextField.getMin().requestFocus(); // 文本框 时 获得焦点
214 return null;
215 } else if (!isAllNumber(myTextField.getSec().getText())) {
216 JOptionPane.showMessageDialog(this,
217 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
218 JOptionPane.WARNING_MESSAGE);
219 myTextField.getSec().setText(String.valueOf(sur_sec));// 设置当前秒钟
220 myTextField.getSec().requestFocus(); // 文本框 时 获得焦点
221 return null;
222 } else {
223 Integer int_hour = Integer
224 .parseInt(myTextField.getHour().getText());
225 Integer int_min = Integer.parseInt(myTextField.getMin().getText());
226 Integer int_sec = Integer.parseInt(myTextField.getSec().getText());
227 int hour = int_hour.intValue() - sur_hour;
228 int min = int_min.intValue() - sur_min;
229 int sec = int_sec.intValue() - sur_sec;
230 if (sec < 0) {
231 if (min > 0 && hour >= 0) {
232 sec += 60;
233 min = min - 1;
234 }
235 if (min == 0 && hour > 0) {
236 min += 60;
237 hour -= 1;
238 }
239 } else if (min < 0) {
240 if (hour > 0) {
241 min += 60;
242 hour = hour - 1;
243 }
244 } else if (hour == 0 && min == 0 && sec < 0) {
245 myLabel.getSurplus().setVisible(false);
246 }
247 String sur = new String("剩余:" + hour + "时" + min + "分" + sec + "秒");
248 myLabel.getSurplus().setText(sur);
249 return sur;
250 }
251
252 }
253
254 /**
255 * 重写DocumentListener的方法 该方法监听三个文本域(hour,min,sec)是否已经填写好
256 * 如果填写好,一些按钮就会被触发可用,否则不可用
257 */
258 @Override
259 public void changedUpdate(DocumentEvent e) {//
260 if (myTextField.getHour().getText().equals("")
261 || myTextField.getMin().getText().equals("")
262 || myTextField.getSec().getText().equals("")) {
263 myButton.getShutdown().setEnabled(false);
264 myButton.getRestart().setEnabled(false);
265 myButton.getLogout().setEnabled(false);
266 myButton.getClear().setEnabled(false);
267 } else {
268 myButton.getShutdown().setEnabled(true);
269 myButton.getRestart().setEnabled(true);
270 myButton.getLogout().setEnabled(true);
271 myButton.getClear().setEnabled(true);
272 }
273 }
274
275 /**
276 * 重写DocumentListener的方法
277 */
278 @Override
279 public void insertUpdate(DocumentEvent e) {
280 changedUpdate(e);
281
282 }
283
284 /**
285 * 重写DocumentListener的方法
286 */
287 @Override
288 public void removeUpdate(DocumentEvent e) {
289 changedUpdate(e);
290 }
291
292 /**
293 * 关机操作
294 */
295 public void shutDown() {
296 try {
297 Runtime.getRuntime().exec("shutdown.exe -s -t 1");
298 } catch (IOException e) {
299 JOptionPane.showMessageDialog(this, "关机执行失败!");
300 }
301 }
302
303 /**
304 * 重启操作
305 */
306 public void restart() {
307 try {
308 Runtime.getRuntime().exec("shutdown.exe -r -t 1");
309 } catch (IOException e) {
310 JOptionPane.showMessageDialog(this, "重启执行失败!");
311 }
312 }
313
314 /**
315 * 注销操作
316 */
317 public void logOut() {
318 try {
319 Runtime.getRuntime().exec("shutdown.exe -l");
320 } catch (IOException e) {
321 JOptionPane.showMessageDialog(this, "注销执行失败!");
322 }
323 }
324
325 /**
326 * 取消操作
327 */
328 public void cancel() {
329 try {
330 Runtime.getRuntime().exec("shutdown.exe -a");
331 } catch (IOException e) {
332 JOptionPane.showMessageDialog(this, "取消执行失败!");
333 }
334 }
335
336 /**
337 * 我们先设置好时间,一旦时间一到, 就调用此方法 该方法中可以实现关机,重启,注销等操作
338 */
339 public void thenExecutive() {
340 Calendar cal = new GregorianCalendar();
341 int then_hour = cal.get(Calendar.HOUR_OF_DAY);
342 int then_min = cal.get(Calendar.MINUTE);
343 int then_sec = cal.get(Calendar.SECOND);
344 // 这里要说明的是:
345 // 由于我们的文本域(hour,min,sec)都有客户端直接输入,可能输入的不是纯数字
346 // 这样我们在监听的时候,
347 // 比如:Integer int_hour = Integer.parseInt(hour.getText());
348 // 就会报错,为了解决这个错误,我们制定了以下方法,
349 // 判断文本域中的内容是否为纯数字,如果不是,则出现提示信息,
350 // 并且将文本内容设置为当前相应的时间
351 if (!isAllNumber(myTextField.getHour().getText())) {
352 JOptionPane.showMessageDialog(this,
353 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
354 JOptionPane.WARNING_MESSAGE);
355 myTextField.getHour().setText(String.valueOf(then_hour));// 设置当前小时
356 myTextField.getHour().requestFocus(); // 文本框 时 获得焦点
357 } else if (!isAllNumber(myTextField.getMin().getText())) {
358 JOptionPane.showMessageDialog(this,
359 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
360 JOptionPane.WARNING_MESSAGE);
361 myTextField.getMin().setText(String.valueOf(then_min));// 设置当前分钟
362 myTextField.getMin().requestFocus(); // 文本框 时 获得焦点
363 } else if (!isAllNumber(myTextField.getSec().getText())) {
364 JOptionPane.showMessageDialog(this,
365 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
366 JOptionPane.WARNING_MESSAGE);
367 myTextField.getSec().setText(String.valueOf(then_sec));// 设置当前秒钟
368 myTextField.getSec().requestFocus(); // 文本框 时 获得焦点
369 } else {
370 Integer int_hour = Integer
371 .parseInt(myTextField.getHour().getText());
372 Integer int_min = Integer.parseInt(myTextField.getMin().getText());
373 Integer int_sec = Integer.parseInt(myTextField.getSec().getText());
374
375 if (then_hour == int_hour.intValue()
376 && then_min == int_min.intValue()
377 && then_sec == int_sec.intValue()) {
378 if (flag == 1) {
379 // 关机
380 shutDown();
381 myButton.getCancel().setEnabled(true);
382 myButton.getClear().setEnabled(false);
383 }
384 if (flag == 2) {
385 // 重启
386 restart();
387 myButton.getCancel().setEnabled(true);
388 myButton.getClear().setEnabled(false);
389 }
390 if (flag == 3) {
391 // 注销
392 logOut();
393 myButton.getCancel().setEnabled(true);
394 myButton.getClear().setEnabled(false);
395 }
396 }
397 }
398 }
399
400 /**
401 * 重写ActionListener的方法 该方法中可以监听: 立刻关机,到时关机,重启,注销,取消,清零等动作
402 */
403 @Override
404 public void actionPerformed(ActionEvent e) {
405 int action_hour = Integer.parseInt(myTextField.getHour().getText());
406 int action_min = Integer.parseInt(myTextField.getMin().getText());
407 int action_sec = Integer.parseInt(myTextField.getSec().getText());
408 // 立刻关机
409 if (e.getSource() == myButton.getImmshutdown()) {
410 shutDown();
411 }
412 // 到时候才关机
413 if (e.getSource() == myButton.getShutdown()) {
414 myButton.getShutdown().setEnabled(false);
415 myButton.getRestart().setEnabled(false);
416 myButton.getLogout().setEnabled(false);
417 myButton.getClear().setEnabled(false);
418 myButton.getCancel().setEnabled(true);
419 myLabel.getSurplus().setVisible(true);
420 myTextField.getHour().setEnabled(false);
421 myTextField.getMin().setEnabled(false);
422 myTextField.getSec().setEnabled(false);
423 flag = 1;
424 if (action_hour >= 0 && action_hour <= 23 && action_min >= 0
425 && action_min <= 59 && action_sec >= 0 && action_sec <= 59) {
426 myAction();
427 } else {
428 JOptionPane.showMessageDialog(this,
429 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
430 JOptionPane.WARNING_MESSAGE);
431 myTextField.getHour().requestFocus(); // 文本框 时 获得焦点
432 }
433 }
434 // 到时候才重启
435 if (e.getSource() == myButton.getRestart()) {
436 myButton.getShutdown().setEnabled(false);
437 myButton.getRestart().setEnabled(false);
438 myButton.getLogout().setEnabled(false);
439 myButton.getClear().setEnabled(false);
440 myButton.getCancel().setEnabled(true);
441 myLabel.getSurplus().setVisible(true);
442 myTextField.getHour().setEnabled(false);
443 myTextField.getMin().setEnabled(false);
444 myTextField.getSec().setEnabled(false);
445 flag = 2;
446 if (action_hour >= 0 && action_hour <= 23 && action_min >= 0
447 && action_min <= 59 && action_sec >= 0 && action_sec <= 59) {
448 myAction();
449 } else {
450 JOptionPane.showMessageDialog(this,
451 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
452 JOptionPane.WARNING_MESSAGE);
453 myTextField.getHour().requestFocus(); // 文本框 时 获得焦点
454 }
455 }
456 // 到时候才注销
457 if (e.getSource() == myButton.getLogout()) {
458 myButton.getShutdown().setEnabled(false);
459 myButton.getRestart().setEnabled(false);
460 myButton.getLogout().setEnabled(false);
461 myButton.getClear().setEnabled(false);
462 myButton.getCancel().setEnabled(true);
463 myLabel.getSurplus().setVisible(true);
464 myTextField.getHour().setEnabled(false);
465 myTextField.getMin().setEnabled(false);
466 myTextField.getSec().setEnabled(false);
467 flag = 3;
468 if (action_hour >= 0 && action_hour <= 23 && action_min >= 0
469 && action_min <= 59 && action_sec >= 0 && action_sec <= 59) {
470 myAction();
471 } else {
472 JOptionPane.showMessageDialog(this,
473 "时间设置满足:0=<小时<24,0=<分钟<60,0=<秒<60!", "温馨提示",
474 JOptionPane.WARNING_MESSAGE);
475 myButton.getClear().setEnabled(true);
476 myTextField.getHour().requestFocus(); // 文本框 时 获得焦点
477 }
478 }
479 // 取消
480 if (e.getSource() == myButton.getCancel()) {
481 cancel();
482 myTextField.getHour().requestFocus();
483 myButton.getShutdown().setEnabled(true);
484 myButton.getRestart().setEnabled(true);
485 myButton.getLogout().setEnabled(true);
486 myButton.getClear().setEnabled(true);
487 myButton.getCancel().setEnabled(false);
488 myLabel.getSurplus().setVisible(false);
489 myTextField.getHour().setEnabled(true);
490 myTextField.getMin().setEnabled(true);
491 myTextField.getSec().setEnabled(true);
492 }
493 // 清零
494 if (e.getSource() == myButton.getClear()) {
495 myTextField.getHour().setText("0");
496 myTextField.getMin().setText("0");
497 myTextField.getSec().setText("0");
498 myTextField.getHour().requestFocus();
499 myButton.getClear().setEnabled(false);
500 myLabel.getSurplus().setVisible(false);
501 }
502 }
503
504 /**
505 * 自己定义的监听器类, 监听我们设置的关机或重启或注销时间是否到时了 如果到时,就执行相应的动作(关机或重启或注销)
506 */
507 public void myListener() {
508 new Thread(new Runnable() {
509 public void run() {
510 while (true) {
511 try {
512 Thread.sleep(1000);
513 } catch (Exception e) {
514 e.printStackTrace();
515 }
516 thenExecutive();// 关机或重启或注销
517 }
518 }
519 }).start();
520 }
521
522 /**
523 * 时间监听器,得到系统时间和设置好时间后,得到剩余时间
524 */
525 public void timeListener() {
526 new Thread(new Runnable() {// 设置一个线程
527 public void run() {
528 while (true) {
529 try {
530 Thread.sleep(1000);
531 } catch (Exception e) {
532 e.printStackTrace();
533 }
534 now();// 得到系统时间
535 surplus_time();// 得到剩余时间
536 }
537 }
538 }).start();
539 }
540
541 /**
542 * 要执行的动作
543 */
544 public void myAction() {
545 if (judgeTime() == false) {
546 JOptionPane.showMessageDialog(this, "时间设定错误");
547 myLabel.getSurplus().setVisible(false);
548 myButton.getShutdown().setEnabled(true);
549 myButton.getRestart().setEnabled(true);
550 myButton.getLogout().setEnabled(true);
551 } else {
552 myListener();
553 }
554 }
555
556 /**
557 * 判断三个文本域(hour,min,sec)中的时间是否合法
558 *
559 * @return
560 */
561 public boolean judgeTime() {
562 boolean boo = true;
563 Calendar cal = new GregorianCalendar();
564 int judge_hour = cal.get(Calendar.HOUR_OF_DAY);
565 int judge_min = cal.get(Calendar.MINUTE);
566 int judge_sec = cal.get(Calendar.SECOND);
567 int int_hour = Integer.parseInt(myTextField.getHour().getText());
568 int int_min = Integer.parseInt(myTextField.getMin().getText());
569 int int_sec = Integer.parseInt(myTextField.getSec().getText());
570
571 if (int_hour < judge_hour) {
572 boo = false;
573 } else {
574 if (int_hour == judge_hour) {
575 if (int_min < judge_min) {
576 boo = false;
577 } else if (int_min == judge_min) {
578 if (int_sec < judge_sec + 5) {
579 boo = false;
580 }
581 }
582 }
583 }
584 return boo;
585 }
586
587 /**
588 * 判断是否为纯数字,如果是返回true,否则返回false
589 *
590 * @param str
591 * 为一个String类型
592 * @return
593 */
594 public boolean isAllNumber(String str) {
595 if (str.matches("^[0-9]+$")) {
596 return true;
597 } else {
598 return false;
599 }
600 }
601 }
/shutdownApp/src/com/b510/examples/window/impl/SetMyLayoutImpl.java
package com.b510.examples.window.impl;
import java.awt.Color;
import java.awt.Font;
import java.util.Calendar;
import javax.swing.JFrame;
import com.b510.examples.window.component.MyLabel;
import com.b510.examples.window.component.MyTextField;
import com.b510.examples.window.dao.SetMyLayoutDao;
/**
* @author Hongten
*
* @time 2011-9-5 2011
*/
public class SetMyLayoutImpl extends JFrame implements SetMyLayoutDao {
private static final long serialVersionUID = -6414864615563143323L;
/**
* 三个文本域(hour,min,sec)属性的相关设置
*/
public void setTextField(MyTextField myTextField) {
// 小时文本域 位置:中间
myTextField.getHour().setColumns(4);// 4列
myTextField.getHour().setForeground(Color.blue);
// 初始化小时文本域,设置为系统当前小时数
myTextField.getHour().setText(
String
.valueOf(Calendar.getInstance().get(
Calendar.HOUR_OF_DAY)));
// 分钟文本域 位置:中间
myTextField.getMin().setColumns(4);// 4列
myTextField.getMin().setForeground(Color.blue);
// 初始化分钟文本域,设置值为0
myTextField.getMin().setText("0");
// 秒钟文本域 位置:中间
myTextField.getSec().setColumns(4);// 4列
myTextField.getSec().setForeground(Color.blue);
// 初始化秒钟文本域,设置为系统当前秒钟数
myTextField.getSec().setText(
String.valueOf(Calendar.getInstance().get(Calendar.SECOND)));
}
/**
* 所有的JLabel属性设置
*/
public void setLabel(MyLabel myLabel) {
// 现在时间 头部显示
myLabel.getTime_now().setForeground(Color.red);
myLabel.getTime_now().setFont(new Font("楷体", Font.BOLD, 20));
myLabel.getSurplus().setForeground(Color.red);
myLabel.getSurplus().setFont(new Font(null, Font.BOLD, 16));
myLabel.getSurplus().setVisible(false);// 初始化是为不可见
myLabel.getConcept().setForeground(Color.gray);
myLabel.getWorkspace().setForeground(Color.gray);
}
}
/shutdownApp/src/com/b510/examples/window/listener/MyButtonListener.java
1 package com.b510.examples.window.listener;
2
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5
6 /**
7 * @author Hongten
8 *
9 * @time 2011-9-5 2011
10 */
11 public class MyButtonListener implements ActionListener{
12
13 @Override
14 public void actionPerformed(ActionEvent e) {
15
16 }
17
18 }