我正在为学校做一个项目,而且我很困难。我编写了一个显示当前时间的程序,但我无法弄清楚如何随着时间的变化更新它。如果有人可以帮助我,或指出我的方向开始,你的帮助将不胜感激。我将发布到目前为止我写的内容。
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
答案 0 :(得分:1)
答案 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秒调用一次,在这种方法中你可以更新显示的时间......