1

所以我想要做的是,当我按下按钮时,JTextField 文本开始每 3 秒更新一次新值。我已经尝试过线程睡眠方法,但它会在睡眠时间冻结整个程序,并且在它结束后文本字段会获取最新的输入。所以这里是我想要做的更好解释的例子。

只要有可用值,我就会每 3 秒按下 JButton 将数字放入 JTextFiel 中。我不希望它附加新文本,只需用新文本替换旧文本。有人知道我该怎么做吗?提前致谢。

4

3 回答 3

2

您应该使用javax.swing.Timer.

final Timer updater = new Timer(3000, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // update JTextField
    }
});
JButton button = new JButton("Click me!");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        updater.start();
    }
});

Timer不会阻塞事件调度线程(就像那样),因此Thread.sleep它不会导致您的程序变得无响应。

于 2012-04-28T21:45:15.813 回答
1

你不能在 EDT 睡觉。您可以使用 swingworker(更好的解决方案)或执行以下操作:

//sleep in new thread
new Thread (new Runnable() {
    public void run() {
        Thread.sleep(3000);
         //update UI in EDT
         SwingUtilities.invokelater(new Runnable()  {
              public void run() {updateYourTextHere();}
          });
    }
}).start();
于 2012-04-28T21:48:21.657 回答
0

您需要在单独的线程上完成“工作”。在这里查看一些答案:Java GUI Not changed

于 2012-04-28T21:43:56.123 回答