java - Java中重写进程KeyEvent

标签 java jtextarea overriding

我正在开发一个支持阿拉伯文本的应用程序。我没有在其中使用系统级语言。用户只需按下该键,根据该键,阿拉伯语 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/

相关文章:

java - Play Framework : JDBC connection vs JDBC datasource

java - 无法在 jtextarea 中选择突出显示的文本

java - 尝试在 JTextAreaInterface 中显示 JSON (asText) 输出

java - 如何在 Eclipse 中查找方法所属的接口(interface)

delphi - Delphi 中重载过程出错

java - 如何使用 BaseAdapter 为自定义 ListView 编写 onitemClickListener 代码?

java - Windows 批处理文件 popd 无法按预期工作

java - Spring MVC - 如何使用 Controller 方法更新模型对象的属性?

java - 使用 JToggleButton 更新 JTextArea

c# - 如何调用 == 运算符来调用 child 的实现?