Java 在keyReleased()事件之后引入延迟

Java 在keyReleased()事件之后引入延迟,java,swing,delay,Java,Swing,Delay,因此,我正在使用swing,我需要找到一种干净的(不占用CPU的方式)在文本字段上引入延迟。基本上,用户将在该字段中输入一个数字,keyReleased()事件检查输入是否符合一些参数,然后将值分配给程序中的数据存储元素。如果数据无效,将显示一条消息。由于每次他们键入字母时都会调用例程(除非他们键入得非常快),因此输入过程变得非常烦人(因为通常情况下,一个或两个字符的数据不符合允许的参数) 我试着为它设置一个计时器对象和一个计时器任务,但是它似乎工作得不太好(因为它会延迟程序运行的线程)。只等待

因此,我正在使用swing,我需要找到一种干净的(不占用CPU的方式)在文本字段上引入延迟。基本上,用户将在该字段中输入一个数字,keyReleased()事件检查输入是否符合一些参数,然后将值分配给程序中的数据存储元素。如果数据无效,将显示一条消息。由于每次他们键入字母时都会调用例程(除非他们键入得非常快),因此输入过程变得非常烦人(因为通常情况下,一个或两个字符的数据不符合允许的参数)

我试着为它设置一个计时器对象和一个计时器任务,但是它似乎工作得不太好(因为它会延迟程序运行的线程)。只等待数据达到一定长度的选项也是不可能的,因为(与之前的状态一样)输入的长度可能不同


有人有什么想法吗?谢谢

我经常做这样的事情,我有两个建议

处理这个问题的标准方法是使用InputVerifier类。然而,这只在输入组件失去焦点时才起作用——它的设计是为了防止用户在输入字段无效时导航出输入字段,但在输入字段无效之前不会进行检查

我这样做的另一种方式是检查每次击键的有效性,但在无效时不显示消息。相反,使用颜色表示有效性-例如,无效时将其涂成红色,有效时将其涂成黑色。这几乎不像消息那样具有侵扰性。您可以使用工具提示提供更详细的反馈


您还可以组合这些方法。

编写自定义文档过滤器。阅读Swing教程中关于的部分以了解更多信息。

执行验证以通知用户散焦错误绝对是我的首选方法+1美元。