Java:确定用户是否已停止键入

Java:确定用户是否已停止键入,java,text,typing,Java,Text,Typing,我正在用Java创建一个简单的文本编辑器,并尝试添加撤消和重做功能。我希望程序能够确定用户是否已停止在文本区域中键入,而不仅仅是他们是否输入了字符。程序应该只保存一个字符,如果它是他们键入的唯一内容。您将如何执行此操作?定义“停止键入” 基本上,我会考虑使用计时器。以每个字符事件为例,添加一个计数器和一个计时器,每当出现加钥匙事件时,该计数器和计时器都会重新启动。将“停止键入”定义为时间已过 如果你真的想这样做,那就想想吧,因为这听起来像是要把我的火把和干草叉逼疯了 public static

我正在用Java创建一个简单的文本编辑器,并尝试添加撤消和重做功能。我希望程序能够确定用户是否已停止在文本区域中键入,而不仅仅是他们是否输入了字符。程序应该只保存一个字符,如果它是他们键入的唯一内容。您将如何执行此操作?

定义“停止键入”

基本上,我会考虑使用计时器。以每个字符事件为例,添加一个计数器和一个计时器,每当出现加钥匙事件时,该计数器和计时器都会重新启动。将“停止键入”定义为时间已过


如果你真的想这样做,那就想想吧,因为这听起来像是要把我的火把和干草叉逼疯了

public static long lastKeyPressTime = 0l;
在KeyListener界面中

public void keyPressed(KeyEvent evt) {
   lastKeyPressTime = System.currentTimeMillis();
}
最后,在适当的、快速运行的线程中

if((system.currentTimeMillis() - lastKeyPressTime) > 2000) {
   //do something, because the user hasnt typed for two seconds
}

这是个好主意。你知道javax.swing API吗?这是一个很好的建议,也是思考这是否真的是你,或者更重要的是,你的用户想要的。要非常小心使事情自动化太多。你不想在触发晦涩的规则时,像Word这样的东西会随机地重新格式化文本,这不是线程安全的
lastKeyPressTime
可能应该在此处标记为
volatile
,以便“快速运行”线程可以观察到从EDT向其写入的内容。