如何将系统时间(运行)添加到Jpanel?

时间:2015-06-17 10:59:05

标签: java multithreading swing

我对java编码很新。所以不太了解它。我正在尝试将系统时钟(运行)添加到我的帧中。我正在使用jpanel这样做。这是我的代码,

import javax.swing.*;

import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Emp_Try implements ActionListener, Runnable
{
  JFrame fr;
  JPanel p1,p4;
  JLabel tim;
  Thread t,t1;
  String time;

  public static void main(String as[]){
    new Emp_Try();
    Date d=new Date();
    System.out.println(d);
          //System.out.println(time);
      new Thread(new Time()).start();;
  }

 void printTime(){
    Calendar cal = new GregorianCalendar();
      String hour = String.valueOf(cal.get(Calendar.HOUR));
      String minute = String.valueOf(cal.get(Calendar.MINUTE));
      String second = String.valueOf(cal.get(Calendar.SECOND));
      time=hour+":"+minute+":"+second;

}


public void run(){
  for(;;){
     printTime();
     tim.setText(time);
     p4.add(tim);
     fr.repaint();
  try{
    Thread.sleep(1000);
  }
  catch(Exception e)
  {
     e.printStackTrace();
  }
 }
 }
 Emp_Try()
 {
    p4= new JPanel();
    p1=new JPanel();
    tim=new JLabel();
    fr=new JFrame();
    tim.setText(time);
    p4.add(tim); 
    p1.add(p4); 
    p1.add(p4,BorderLayout.EAST);
    fr.getContentPane().add(BorderLayout.NORTH, p1);
    fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fr.setSize(1100, 700);
    fr.getContentPane().setBackground(Color.LIGHT_GRAY);
    fr.setVisible(true);

 }
 }

使用控制台而不是Jpanel。我得到了理想的结果。我怎样才能在这里获得工作时钟?

1 个答案:

答案 0 :(得分:2)

使用Swing时,您需要使用Timer事件刷新UI组件上的文本。这可以通过创建计时器并开始每1秒运行一次来​​轻松完成。在执行的操作中,您更新UI组件(例如JLabel)以将当前时间作为其文本。因此它将显示为每秒更新时间的时钟。这是一个例子(基于JLabel和Timer)

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ClockWindow {
    private JFrame window;
    private JLabel clockLabel;
    public final static int ONE_SECOND = 1000;
    private final SimpleDateFormat clockFormat = new SimpleDateFormat("H:mm:ss");
    public ClockWindow(){
        window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        clockLabel = new JLabel();
        clockLabel.setFont(new Font(clockLabel.getFont().getName(), Font.PLAIN, 80));
        window.getContentPane().setLayout(new BorderLayout());
        window.getContentPane().add(clockLabel,BorderLayout.CENTER);
    }

    public void show(){

        Timer timer = new Timer(ONE_SECOND, new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                clockLabel.setText(clockFormat.format(new Date()));
                clockLabel.repaint();
            }
        });
        clockLabel.setText(clockFormat.format(new Date()));
        timer.start();
        window.pack();
        window.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                ClockWindow app = new ClockWindow();
                app.show();
            }
        });
    }
}