Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 刷新JLabel_Java_Swing_Jframe - Fatal编程技术网

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);