2012-04-28 56 views
1

所以我想要做的是,當我按下按鈕JTextField文本開始每3秒更新一次新值。我已經嘗試了Thread sleep metod,但它凍結了整個程序的睡眠時間,並在它結束後,textfields獲取最新的輸入。所以這裏更好地解釋了我想要做的事情。按下按鈕後每3秒更新JTextFields文本

我按JButton,只要有可用的值,每3秒就將數字放入JTextFiel中。我不想讓它追加新的文本,只需用新的替換舊的。任何人有想法我怎麼能做到這一點?提前致謝。

回答

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一樣),所以它不會導致程序無響應。

+0

此代碼更新後,我只按一下按鈕的文本字段。我也嘗試使用循環,但它仍然只更新一次文本字段。任何想法爲什麼? – 2012-04-28 21:51:49

+0

解決了它,感謝您的解決方案。我的變量只是重新設置它自己,所以這就是爲什麼我認爲它沒有更新。 – 2012-04-28 21:53:24

+0

@RohitMalish你能分享你的解決方案嗎? – lony 2014-11-27 17:24:44

1

你不能在美國東部時間睡覺。您可以使用一個擺動工具(更好的解決方案)或做這樣的事情:

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