2011-12-12 44 views
1

我正在为一所学校的项目工作,而我很困难。我已经写了一个程序显示当前时间,但我无法弄清楚如何随着时间的变化来更新显示。如果有人能帮助我,或者指引我走向某个方向,那么您的帮助将不胜感激。我将发布我在下面写的内容。爪哇获取时钟更新

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 

回答

1

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

+0

我可以有另一个提示什么的,我现在很失落。我看了一下Timer类,但我不确定如何实现到我的程序中。 – Gnosis

+0

-1在Swing中使用的Timer是javax.swing.Timer,而不是util中的Timer – kleopatra

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 
+0

我不能做正确的事情,因为我在尝试编译时遇到错误。它说错误:预计t.start(); – Gnosis

+0

你能发布你的最新代码吗? – Pradeep

+0

现在它回到了我第一次发布时的状态,与其他人建议的一些事情捆绑在一起,但是那不让我在哪里。 – Gnosis

0

我与普拉迪普同意,你必须使用一个定时器,例如你可以定义一个定时器,并使该方法每1秒钟呼叫一次,在这种方法中你可以更新显示的时间...