`
isiqi
  • 浏览: 16026245 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

J2SE Canvas应用:设计一个计时器部件

阅读更多

1

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:  }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics