要求很简单:
文本字段用于从用户那里获取一些信息。如果用户在最近2秒钟内未键入新字符,则使用文本字段中的文本并将其提交到某个界面。界面还不重要。
我必须将propertyChange或键监听器附加到文本字段。每次用户添加新字符时,我的内部字符串缓冲区都会更新。
问题:
我需要一些模板或设计模式来实现一个异步线程,该线程在触发操作之前要等待2秒钟。在2秒钟的延迟内可以重置线程,因此线程再次等待2秒钟。
因此,如果文本字段更改,线程将被重置。如果线程等待了2秒钟,则可以使用文本字段数据填充界面。
我考虑过如果检测到文本字段更改,则创建一个2秒延迟的线程并中断该线程。线程中断后,将触发一个新的延迟线程,但是我想知道是否有人知道我可以直接使用的Java类。
最佳答案
我已经实现了一次,您可以使用java.swing.Timer
,例如,将重复设置为false(仅触发一次),并在每次用户输入字符时将其重置(测试代码here)
例如:
import javax.swing.Timer;
...
private Timer t; //declare "global" timer (needs to bee seen from multiple methods)
private void init() {
t = new Timer(2000, putYourUsefullActionListenerHere);
//the one that will acctually do something after two seconds of no change in your field
t.setRepeats(false); // timer fires only one event and then stops
}
private void onTextFieldChange() { //call this whenever the text field is changed
t.restart();
//dont worry about "restart" and no start, it will just stop and then start
//so if the timer wasnt running, restart is same as start
}
private void terminate() {
//if you want for any reson to interrupt/end the 2 seconds colldown prematurelly
//this will not fire the event
t.stop();
}