【发布时间】:2011-10-06 02:30:35
【问题描述】:
我正在用 Java 创建一个简单的文本编辑器,并尝试添加撤消和重做功能。我希望程序能够确定用户是否停止在文本区域中输入,而不仅仅是他们是否输入了字符。只有当这是他们键入的唯一内容时,程序才应保存单个字符。你会怎么做呢?
【问题讨论】:
-
这是个好主意。你知道 javax.swing API 吗?
我正在用 Java 创建一个简单的文本编辑器,并尝试添加撤消和重做功能。我希望程序能够确定用户是否停止在文本区域中输入,而不仅仅是他们是否输入了字符。只有当这是他们键入的唯一内容时,程序才应保存单个字符。你会怎么做呢?
【问题讨论】:
定义“停止输入”。
基本上,我会考虑使用计时器。采取每个角色事件,添加一个计数器和一个计时器,每次有 Key Up 事件时都会重新启动。将“停止输入”定义为经过足够的时间。
然后想想如果你真的想要那样做,因为这听起来会让我完全把火把和干草叉带到开发者的房子里。 p>
【讨论】:
主类中的某处;
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
}
【讨论】:
lastKeyPressTime 应该在此处标记为 volatile,以便“快速运行”线程可以观察到从 EDT 对其进行的写入。