按下按钮后每3秒更新一次JTextFields文本

时间:2012-04-28 21:36:41

标签: java swing timer jbutton jtextfield

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

我按下JButton,只要有可用值,它就会每隔3秒将数字放在JTextFiel中。我不希望它附加新文本,只需用new替换旧文本。任何人都有想法我怎么能这样做?提前谢谢。

3 个答案:

答案 0 :(得分: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所做的那样),因此不会导致程序无响应。

答案 1 :(得分: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();

答案 2 :(得分:0)

你需要在一个单独的线程上完成'工作'。请参阅此处的一些答案:Java GUI Not changing