Canvas类:
1:
import
java.awt.Frame;
2:
import
java.awt.event.WindowAdapter;
3:
import
java.awt.event.WindowEvent;
4:
5:
import
java.awt.AWTEvent;
6:
import
java.awt.Canvas;
7:
import
java.awt.Color;
8:
import
java.awt.Graphics;
9:
import
java.awt.event.MouseEvent;
10:
import
java.text.ParseException;
11:
import
java.text.SimpleDateFormat;
12:
import
java.util.Date;
13:
14:
class
StopWatch
extends
Canvas
implements
Runnable {
15:
private long
startTime
= 0;
16:
private long
endTime
= 0;
17:
private boolean
bStart
=
false
;
18:
19:
public
StopWatch() {
20:
enableEvents(AWTEvent.
MOUSE_EVENT_MASK
);
21:
setSize(80, 30);
22:
}
23:
24:
protected void
processMouseEvent(MouseEvent e) {
25:
if
(e.getID() == MouseEvent.
MOUSE_PRESSED
) {
26:
bStart
=
true
;
27:
startTime
=
endTime
= System.currentTimeMillis();
28:
repaint();
29:
new
Thread(
this
).start();
30:
}
else if
(e.getID() == MouseEvent.
MOUSE_RELEASED
) {
31:
bStart
=
false
;
32:
repaint();
33:
}
34:
}
35:
36:
@Override
37:
public void
paint(Graphics g) {
38:
super
.paint(g);
39:
// 时间值的小时,分,秒用两位数字显示,不足两位的部分前面加0,即 "HH:mm:ss"
40:
SimpleDateFormat sdf =
new
SimpleDateFormat(
"HH:mm:ss"
);
41:
Date elapsedTime =
null
;
42:
try
{
43:
elapsedTime = sdf.parse(
"00:00:00"
);
44:
}
catch
(ParseException e) {
45:
e.printStackTrace();
46:
}
47:
// elapsedTime.setTime(endTime - startTime)不是"00:00:00" 而是"08:00:00"
48:
elapsedTime.setTime(
endTime
-
startTime
+ elapsedTime.getTime());
49:
String display = sdf.format(elapsedTime);
50:
g.drawRect(0, 0, 78, 28);
51:
g.fill3DRect(2, 2, 75, 25,
true
);
52:
g.setColor(Color.
red
);
53:
g.drawString(display, 10, 20);
54:
}
55:
56:
@Override
57:
public void
run() {
58:
while
(
bStart
) {
59:
try
{
60:
Thread.sleep(500);
61:
}
catch
(InterruptedException e) {
62:
e.printStackTrace();
63:
}
64:
endTime
= System.currentTimeMillis();
65:
repaint();
66:
}
67:
}
68:
69:
}
Main类(程序入口):
1:
public class
TestStopWatch {
2:
public static void
main(String[] args) {
3:
Frame f =
new
Frame(
"StopWatch"
);
4:
f.add(
new
StopWatch());
5:
f.setSize(200, 200);
6:
f.setVisible(
true
);
7:
f.addWindowListener(
new
WindowAdapter() {
8:
9:
@Override
10:
public void
windowClosing(WindowEvent e) {
11:
super
.windowClosing(e);
12:
System.exit(0);
13:
}
14:
});
15:
}
16:
}

