覆盖Java中的KeyEvent进程

时间:2012-12-02 11:10:24

标签: java jtextarea override

我正在开发一个支持阿拉伯语文本的应用程序。我没有使用系统级语言。用户只需按下键,然后根据该键,将在JTextArea中插入阿拉伯语unicode。我创建了一个类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);
    }
}

1 个答案:

答案 0 :(得分:1)

是的,它被多次调用,因为发生了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

忽略按下和释放事件,因为您只关心用户是否输入了字符。