实现代码如下:
TestStopWatch.java文件代码:
import java.awt.*;
import java.awt.event.*;
public class TestStopWatch extends Frame {
public TestStopWatch() {
add(new StopWatch());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Starting TestMyButton...");
TestStopWatch mainFrame = new TestStopWatch();
mainFrame.setSize(400, 400);
mainFrame.setTitle("TestButton");
mainFrame.setVisible(true);
}
}
StopWatch.java文件代码如下:
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StopWatch extends Canvas implements Runnable {
long startTime = 0;
long endTime = 0;
boolean bStart = false;
public StopWatch() {
// TODO Auto-generated constructor stub
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
protected void processMouseEvent(MouseEvent e) {
if (e.getID() == MouseEvent.MOUSE_PRESSED) {
startTime = endTime = System.currentTimeMillis();
repaint();
bStart = true;
new Thread(this).start();
} else if (e.getID() == MouseEvent.MOUSE_RELEASED) {
endTime = System.currentTimeMillis();
repaint();
bStart = false;
}
}
public void paint(Graphics g) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Date elapsedTime = null;
try {
elapsedTime = sdf.parse("00:00:00");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
elapsedTime.setTime(elapsedTime.getTime() + endTime - startTime);
String strTime = sdf.format(elapsedTime);
g.fill3DRect(0, 0, 78, 28, true);
g.setColor(Color.WHITE);
g.drawString(strTime, 10, 20);
}
public void run() {
while (bStart) {
try {
Thread.sleep(500);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
endTime = System.currentTimeMillis();
repaint();
}
}
}
运行结果:
为了实现能看到秒的走动,继承了Runnable接口,在run方法中编写了相应的代码。在鼠标按压时创建一个线程来实现秒的走动。