标签:
模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行。
1.定义一个Clock类。它继承Label类,并实现Runnable接口。这个类中有一个Thread类型的clocker域,以及start()和run()方法。在run()方法中,每隔一秒就把系统时间显示为label的文本。
1 class Clock extends Label implements Runnable
2 {
3 //定义Thread类型的clocker域
4 public Thread clocker=null;
5 public Clock()
6 {
7
8 //初始化时,把label设置为当前系统时间
9 //调用toString方法转化为String类型
10 setText(new Date().toString());
11 }
12 //控制线程的启动
13 public void start()
14 {
15 if(clocker==null)
16 {
17 //clocker通过Thread类构造方法得到的对象进行初始化,并将Clock类的当前对象作为参数
18 clocker=new Thread(this);
19 clocker.start();
20 }
21
22 }
23 //控制线程的停止
24 public void stop()
25 {
26 clocker=null;
27 }
28 //实现Runnable接口中的run()方法
29 public void run()
30 {
31 Thread currentThread=Thread.currentThread();
32 //判断clocker是否是当前运行的线程
33 while(clocker==currentThread)
34 {
35 setText(new Date().toString());
36 try
37 { //休眠1s钟
38 clocker.sleep(1000);
39 }
40 catch (InterruptedException ie)
41 {
42 System.out.println("Thread error:"+ie);
43 }
44 }
45
46 }
47
48 }
2.定义一个ClockFrame类。它继承Frame类,并实现ActionListener接口。在这个类中定义start和stop按钮来控制电子时钟的运行。并且这个类有一个Clock类的域,把这个Clock类对象添加到ClockFrame类中显示。
1 public class ClockFrame extends Frame implements ActionListener
2 {
3 private Button start=new Button("Start");
4 private Button stop=new Button("Stop");
5 private Clock c=new Clock();
6 public ClockFrame()
7 {
8 super("电子时钟");
9 //设置窗体使用流式布局
10 setLayout(new FlowLayout());
11 //添加按钮并且为其注册监听器
12 add(start);
13 start.addActionListener(this);
14 add(stop);
15 stop.addActionListener(this);
16 //使用继承WindowAdapter的匿名内部类来实现窗口的关闭
17 addWindowListener(new WindowAdapter()
18 {
19 public void windowClosing(WindowEvent we)
20 {System.exit(0);}
21 });
22 add(c);
23 //使构件在窗口中得到合理的安排。
24 pack();
25 setVisible(true);
26
27
28 }
29 //通过调用Clock对象中的方法,实现对事件的响应。
30 public void actionPerformed(ActionEvent ae)
31 {
32 if(ae.getSource()==start)
33 {
34 c.start();
35 }
36 else
37 if(ae.getSource()==stop)
38 c.stop();
39
40 }
41 public static void main(String[] args)
42 {
43 new ClockFrame();
44 }
45 }
3、运行:
注:
需要导入的类:
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
标签:
原文地址:http://www.cnblogs.com/wsw-tcsygrwfqd/p/4979674.html