Java получает часы для обновления - PullRequest
0 голосов
/ 12 декабря 2011

Я работаю над проектом для школы, и я как-то застрял. Я написал программу, отображающую текущее время, но я не могу понять, как заставить ее обновляться по мере изменения времени. Если кто-то может мне помочь или указать мне направление, чтобы начать, ваша помощь будет принята с благодарностью. Я опубликую то, что я написал до сих пор.

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 ]

1 голос
/ 12 декабря 2011

Объявите 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
1 голос
/ 12 декабря 2011

Подсказка: взгляните на классы Таймер и Таймер .Затем используйте эти классы для обновления текста JLabel.

0 голосов
/ 12 декабря 2011

Я согласен с Pradeep, вы должны использовать таймер, например, вы можете определить таймер и сделать так, чтобы метод вызывался каждую 1 секунду, в этом методе вы можете обновить отображаемое время ...

...