1

要求很简单:一个文本字段用于从用户那里获取一些信息。如果用户在最后 2 秒内没有输入新字符,则使用文本字段中的文本并提交到某个界面。接口还不重要。

我必须将 propertyChange 或键侦听器附加到文本字段。每次用户添加新字符时,我的内部字符串缓冲区都会更新。

问题: 我需要一些模板或设计模式来实现异步线程,该线程在触发动作之前等待 2 秒。在 2 秒的延迟内线程可以被重置,因此线程再次等待 2 秒。

因此,如果文本字段发生更改,线程将被重置。如果线程等待 2 秒,则可以使用文本字段数据填充界面。

如果检测到文本字段更改,我考虑创建一个 2 秒延迟线程并中断该线程。线程被中断后,会触发一个新的延迟线程,但我想知道是否有人知道我可以直接使用的 java 类。

4

2 回答 2

2

我已经实现了一次,您可以使用java.swing.Timer例如,只需将重复设置为 false(仅触发一次)并在每次用户输入字符时将其重置(此处为测试代码)

例如:

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();
}
于 2013-10-31T15:35:17.337 回答
1

我必须将 propertyChange 或键侦听器附加到文本字段

您应该使用 DocumentListener。每当从文本字段中添加/删除文本时,您都会收到通知。

阅读 Swing 教程中有关如何编写文档侦听器的部分以获取更多信息和示例。本教程还有一个关于How to Use a Swing Timer.

于 2013-10-31T16:02:54.780 回答