所以我想要做的是,當我按下按鈕JTextField文本開始每3秒更新一次新值。我已經嘗試了Thread sleep metod,但它凍結了整個程序的睡眠時間,並在它結束後,textfields獲取最新的輸入。所以這裏更好地解釋了我想要做的事情。按下按鈕後每3秒更新JTextFields文本
我按JButton,只要有可用的值,每3秒就將數字放入JTextFiel中。我不想讓它追加新的文本,只需用新的替換舊的。任何人有想法我怎麼能做到這一點?提前致謝。
所以我想要做的是,當我按下按鈕JTextField文本開始每3秒更新一次新值。我已經嘗試了Thread sleep metod,但它凍結了整個程序的睡眠時間,並在它結束後,textfields獲取最新的輸入。所以這裏更好地解釋了我想要做的事情。按下按鈕後每3秒更新JTextFields文本
我按JButton,只要有可用的值,每3秒就將數字放入JTextFiel中。我不想讓它追加新的文本,只需用新的替換舊的。任何人有想法我怎麼能做到這一點?提前致謝。
你應該使用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
一樣),所以它不會導致程序無響應。
您需要在單獨的線程上完成「工作」。看到這裏的一些答案:Java GUI Not changing
你不能在美國東部時間睡覺。您可以使用一個擺動工具(更好的解決方案)或做這樣的事情:
//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-28 21:51:49
解決了它,感謝您的解決方案。我的變量只是重新設置它自己,所以這就是爲什麼我認爲它沒有更新。 – 2012-04-28 21:53:24
@RohitMalish你能分享你的解決方案嗎? – lony 2014-11-27 17:24:44