程序结构
Clock.java:main入口
MainFrame.java: swing主界面
知识点:JFrame实现Runnable接口, 使主界面运行在单独的线程中。
main.java
package clock;
import javax.swing.SwingUtilities;
public class Clock {
public static void main(String[] args)
{
SwingUtilities.invokeLater
(
new Runnable()
{
public void run()
{
new MainFrame();
}
}
);
}
}
MainFrame.java
package clock;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.text.SimpleDateFormat;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import java.util.Date;
public class MainFrame extends JFrame implements Runnable,WindowListener
{
private static final long serialVersionUID = 8112161040327127271L;
private JLabel nowLabel = new JLabel("现在时间是:");
private JLabel timeLabel = new JLabel("");
private SimpleDateFormat sdf=null;
private Thread timer=null;
private boolean go;
public MainFrame()
{
sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
go = true;
createGUI();
addWindowListener(this);
timer=new Thread(this);
timer.start();
}
private void createGUI()
{
this.setLayout(null);
this.add(nowLabel);
nowLabel.setBounds(10, 10, 70, 20);
this.add(timeLabel);
timeLabel.setBounds(80, 10, 120, 20);
this.setSize(210, 60);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void run()
{
while(go)
{
try
{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}finally
{
timeLabel.setText(sdf.format(new Date()));
}
}
go = false;
System.exit(0);
}
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}