所以我想要做的是,当我按下按钮时,JTextField文本每3秒开始更新为新值。我已经尝试过Thread sleep metod,但它会冻结整个程序的睡眠时间,并且在文本域结束后获取最新的输入。所以这里有更好的解释我想要做的例子。
我按下JButton,只要有可用值,它就会每隔3秒将数字放在JTextFiel中。我不希望它附加新文本,只需用new替换旧文本。任何人都有想法我怎么能这样做?提前谢谢。
答案 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