设计思路
- (1) Clock类用于主界面的显示,当中生成三个MyThread对象
- (2) MyThread负责Jlabel的显示和时间的控制
Clock.java
package PackClock;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class Clock extends WindowAdapter
{
public static JFrame f = new JFrame("时钟");
public static void main(String[] args)
{
MyThread T1;
MyThread T2;
MyThread T3;
T1 = new MyThread("线程1",1000);
T1.start();
T2 = new MyThread("线程2",5000);
T2.start();
T3 = new MyThread("线程3",10000);
T3.start();
Clock a = new Clock();
a.dispaly();
}
public void dispaly()
{
f.setSize(400,240);
f.setLocation(200,140);
f.setBackground(Color.LIGHT_GRAY);
f.setLayout(new GridLayout(1,3));
f.addWindowListener(this);
f.setVisible(true);
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
MyThread.java
package PackClock;
import javax.swing.*;
import java.text.DecimalFormat;
class MyThread extends Thread
{
private long m = 0;
private long countSec,countMin,countHour;//计时变量
private DecimalFormat textFormat=new DecimalFormat("00");//格式化输出
JLabel label ;
MyThread(String name, long m)
{
super(name);
this.m = m;
countSec = 0;
countMin = 0;
countHour = 0;
label = new JLabel("0:0:0");
label.setText(textFormat.format(countHour)+":"+textFormat.format(countMin)+
":"+textFormat.format(countSec));
Clock.f.add(label);
Clock.f.setVisible(true);
}
public void run()
{
int x = 0;
try
{
while(true)
{
countSec += m/1000;
if(countSec>=59)
{
countMin++;
countSec=0;
if(countMin>=59)
{
countHour++;
countMin=0;
}
}
label.setText(textFormat.format(countHour)+":"+textFormat.format(countMin)+
":"+textFormat.format(countSec));
Thread.sleep(m);
}
}
catch(Exception e)
{
}
}
}