我正在开发一个支持阿拉伯文本的应用程序。我没有在其中使用系统级语言。用户只需按下该键,根据该键,阿拉伯语 unicode 将被插入到 JTextArea 中。我创建了一个rabbittextArea 类,并用Swing 的JTextArea 对其进行了扩展。我在此类中包含了一个重写函数 processKeyEvent(KeyEvent e)。现在我的问题是,每当我按下某个键时,这个函数就会触发3次,可能是第一次KeyDown,第二次KeyUp,第三次KeyPressed。我希望这个函数只触发一次,但我不知道如何触发。请有人帮助我...
我正在使用以下代码
@Override
protected void processKeyEvent(KeyEvent event) {
switch (event.getKeyChar()) {
case 'a':
append("\u0627");
break;
case 'H':
append("\u062D");
break;
case 'm':
append("\u0645");
break;
case 'd':
append("\u062F");
break;
default:
super.processKeyEvent(event);
}
}
最佳答案
是的,它被多次调用,因为发生了 3 个事件(例如“a”):
- KEY_PRESSED,keyCode=65,keyChar='a'
- KEY_TYPED keyCode=0,keyChar='a'
- KEY_RELEASED,keyCode=65,keyChar='a'
而上面的代码只是通过KeyChar来区分。使用
event.getID() == KeyEvent.KEY_TYPED
忽略按下和释放事件,因为您只关心用户是否键入了字符。
关于java - Java中重写进程KeyEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668690/