要求很简单:
文本字段用于从用户那里获取一些信息。如果用户在最近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();
}

10-05 18:59