1

我正在开发一个支持阿拉伯语文本的应用程序。我没有在其中使用系统级语言。用户只需按下键,然后根据该键,将阿拉伯 unicode 插入到 JTextArea 中。我创建了一个ArabicTextArea 类,并使用Swing 的JTextArea 对其进行了扩展。我在这个类中包含了一个覆盖函数 processKeyEvent(KeyEvent e)。现在我的问题是,每当我按下某个键时,此功能会触发 3 次,可能是 KeyDown 的第 1 次、KeyUp 的第 2 次和 KeyPressed 的第 3 次。我希望这个函数只触发一次,但我不知道如何。请有人帮我...

我正在使用以下代码

@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);
    }
}
4

1 回答 1

1

Yes, it is being called multiple times because 3 events occur ('a' for example):

  • KEY_PRESSED, keyCode=65, keyChar='a'
  • KEY_TYPED keyCode=0, keyChar='a'
  • KEY_RELEASED, keyCode=65, keyChar='a'

and the code above only distinguishes by the KeyChar. Use

event.getID() == KeyEvent.KEY_TYPED

to ignore the press and release events, since you only care if the user typed the character.

于 2013-05-08T18:43:30.863 回答