Java 刷新JLabel
我试图在Java 刷新JLabel,java,swing,jframe,Java,Swing,Jframe,我试图在JFrame中显示当前时间。如何刷新JLabel中的文本,而不在每次需要更新时打开单独的框架 这是到目前为止我所有的代码 测试 我制作这个程序的目的是制作一个显示当前时间的框架。它使用程序中的本地时间,而不是实际时间。请提前感谢,如果我需要更改代码中的任何内容以使其更好,请随时通知我 API文档将是您的朋友。请查看JLabel的文档,特别是方法。您可以在事件处理程序中再次使用此方法来更改标签的文本 但另一个问题是,您既没有触发也没有注册事件,因此您编写的actionPerformed函数
JFrame
中显示当前时间。如何刷新JLabel
中的文本,而不在每次需要更新时打开单独的框架
这是到目前为止我所有的代码
测试
我制作这个程序的目的是制作一个显示当前时间的框架。它使用程序中的本地时间,而不是实际时间。请提前感谢,如果我需要更改代码中的任何内容以使其更好,请随时通知我 API文档将是您的朋友。请查看
JLabel
的文档,特别是方法。您可以在事件处理程序中再次使用此方法来更改标签的文本
但另一个问题是,您既没有触发也没有注册事件,因此您编写的actionPerformed
函数永远不会被调用。如果第二个精度足够好,您可以使用。在不需要更改代码的情况下,这将使您走上正确的道路:
public class CountDown extends JFrame{
private static final long serialVersionUID = 1L;
private JLabel label = new JLabel(); // note: understand static keyword before using it.
private long startTime = System.currentTimeMillis(); // gets the current time in milliseconds, when your class is initialized.
public CountDown(String time){
super("Title");
setLayout(new FlowLayout());
add(label);
// label.setText("Current Time: " + time); "time" was never in scope here.
Handler eventHandler = new Handler();
new Timer(1000, eventHandler).start(); // will execute ~1/sec
}
private class Handler implements ActionListener{
public void actionPerformed(ActionEvent event){
// NOTE: here, you could put all of your logic that was previously
// in your Thread to determine the time, then use the result
// with label.setText();
long currentTime = System.currentTimeMillis();
long upTime = currentTime - startTime; // this is how many milliseconds your JFrame has been up and running.
// TODO: formate upTime however you desire.
label.setText( <whatever_you_calculate_directly_above> );
}
}
}
}
如果主方法位于单独的文件中,则需要在该文件开头附近导入倒计时。应首先创建倒计时的实例,然后调用其设置标签文本的方法之一 在
倒计时中
必须调用JLabel.setText。设置标签文本的方法:
public void displayTime(String time){
label.setText("Current Time: " + time);
}
…而不是调用System.out.println(时间)
time.displayTime(timeDisplay);
与其使用简单的线程,不如使用java.util.Timer或更适合gui对象的更好的线程
另一句话:类名以大写字母开头,而方法或变量以小写方法开头
最后,您的处理程序在这里要做什么。您没有注册它,而且它似乎没有用。您需要先查看并了解有关更好解决方案的更多详细信息,Swing是单线程的,您不应该尝试从事件调度线程的内容之外修改UI。您还试图使用
=
操作符将ActionEvent的源与错误类型的对象(字符串)进行比较。if(Event.getSource()==“”){
既危险又令人困惑,event.getSource()
返回一个对象
,它是一个字符串
,然后==
很可能会失败,因为字符串
比较不起作用。这种方法可能需要查看和了解更多信息ideas@AndrewThompsonOps,应该是and:p创建一个方法displayTime
,然后从线程调用它是不好的practice在Swing应用程序中。您希望您的UI更新发生在事件分派线程中。您的另一个建议,使用javax.Swing.Timer似乎更适合这种情况。@sethro我同意。事实上,我最初考虑直接谈论javax.Swing.Timer,但后来我认为一步一步进行会更清晰。我不知道是否这样做了好吧。
public static void main( String[] args){
JFrame frame = new CountDown();
frame.setVisible(true);
}
public void displayTime(String time){
label.setText("Current Time: " + time);
}
time.displayTime(timeDisplay);