Java让时钟更新

时间:2011-12-12 08:35:33

标签: java swing timer project clock

我正在为学校做一个项目,而且我很困难。我编写了一个显示当前时间的程序,但我无法弄清楚如何随着时间的变化更新它。如果有人可以帮助我,或指出我的方向开始,你的帮助将不胜感激。我将发布到目前为止我写的内容。

import javax.swing.*;
import java.awt.*;
import java.util.*;


public class Project2 extends JFrame{
public static void main(String[] args){
    Project2 myFrame = new Project2();
    myFrame.pack();
    myFrame.setTitle("Digital Clock");
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myFrame.setLocationRelativeTo(null);
    myFrame.setVisible(true);


}//main()

public Project2(){
System.out.println(currentTime());
JPanel p1 = new JPanel();
p1.setLayout(new FlowLayout());
JLabel time = new JLabel(currentTime());
time.setFont(new Font("TimesRoman", Font.BOLD, 20));
time.setForeground(Color.blue);
p1.add(time);
this.setLayout(new BorderLayout());
this.add(p1, BorderLayout.CENTER);

}

public String currentTime(){
    Calendar calendar = Calendar.getInstance();
   int hours = calendar.get(Calendar.HOUR_OF_DAY);
   int minutes = calendar.get(Calendar.MINUTE);
   int seconds = calendar.get(Calendar.SECOND);
   int aP = calendar.get(Calendar.AM_PM);
   String currentTime = hours+":"+checkTime(minutes)+":"+checkTime(seconds)+" "+amP(aP);
   return currentTime;
 }

public String checkTime(int t){
    String time1;
    if (t < 10){
        time1 = ("0"+t);
        }
    else{
        time1 = (""+t);
        }
    return time1;
}

public String amP(int ap){
    String amPm;
    if( ap == 0)
        amPm = "AM";
    else
        amPm = "PM";
    return amPm;
}



}//Project2

3 个答案:

答案 0 :(得分:1)

提示:查看TimerTimerTask课程。然后使用这些类来更新JLabel的文本。

答案 1 :(得分:1)

将JPanel和JLabel声明为全局变量,并在结尾处添加以下行 构造

ActionListener taskPerformer = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    System.out.println(currentTime());
                    time.setText(currentTime());
                }
            };
            Timer t = new Timer(1000, taskPerformer);
            t.start();

以下是完整的代码:

import javax.swing.*;
import javax.swing.Timer;

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

public class DigitalClock extends JFrame {

    private JPanel p1;
    private JLabel time;

    public static void main(String[] args) {
        DigitalClock myFrame = new DigitalClock();
        myFrame.pack();
        myFrame.setTitle("Digital Clock");
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setLocationRelativeTo(null);
        myFrame.setVisible(true);

    }// main()

    public DigitalClock() {
        System.out.println(currentTime());
        p1 = new JPanel();
        p1.setLayout(new FlowLayout());
        time = new JLabel(currentTime());
        time.setFont(new Font("TimesRoman", Font.BOLD, 20));
        time.setForeground(Color.blue);
        p1.add(time);
        this.setLayout(new BorderLayout());
        this.add(p1, BorderLayout.CENTER);
        ActionListener taskPerformer = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.out.println(currentTime());
                time.setText(currentTime());
            }
        };
        Timer t = new Timer(1000, taskPerformer);
        t.start();
    }

    public String currentTime() {
        Calendar calendar = Calendar.getInstance();
        int hours = calendar.get(Calendar.HOUR_OF_DAY);
        int minutes = calendar.get(Calendar.MINUTE);
        int seconds = calendar.get(Calendar.SECOND);
        int aP = calendar.get(Calendar.AM_PM);
        String currentTime = hours + ":" + checkTime(minutes) + ":"
                + checkTime(seconds) + " " + amP(aP);
        return currentTime;
    }

    public String checkTime(int t) {
        String time1;
        if (t < 10) {
            time1 = ("0" + t);
        } else {
            time1 = ("" + t);
        }
        return time1;
    }

    public String amP(int ap) {
        String amPm;
        if (ap == 0)
            amPm = "AM";
        else
            amPm = "PM";
        return amPm;
    }

}// Project2

答案 2 :(得分:0)

我同意Pradeep,你必须使用一个计时器,例如你可以定义一个计时器,并使方法每1秒调用一次,在这种方法中你可以更新显示的时间......