【问题标题】:Java KeyListener: KeyTyped Backspace, Esc as inputJava KeyListener:KeyTyped Backspace,Esc 作为输入
【发布时间】:2013-03-19 14:28:38
【问题描述】:

KeyTyped 方法中,如何判断是否按下了BackspaceEsc

【问题讨论】:

    标签: java keylistener backspace


    【解决方案1】:

    假设您已正确附加 KeyListener 并已实现该 KeyListener 所需的方法,若要检测特定按键,只需添加以下代码:

    public void keyReleased(KeyEvent ke) 
    {
        if(ke.getKeyCode() == KeyEvent.VK_BACK_SPACE)
        {  
            //code to execute if backspace is pressed
        }
    
        if(ke.getKeyCode() == KeyEvent.VK_ESCAPE)
        {
            //code to execute if escape is pressed
        }
    }
    

    KeyEvent 类 javadocs 可以在以下链接中找到:KeyEvent javadocs
    在那里,您可以找到在实现 Java KeyListeners 和 KeyEvents 时用于检测键盘输入的所有 Java 虚拟键码的列表。关于 KeyListener 的更多信息可以在这里找到:How to Write a Key Listener。要按要求使用 keyTyped 方法,请参阅gangqinlaohu's answer

    【讨论】:

    • 不幸的是,这行不通。在 keyTyped() 方法中,ke.getKeyCode() 没有任何值。有时,能够判断这些字符是否在 keyTyped() 中输入是很有用的。另一种方法是创建一个在 keyReleased() 方法中标记的布尔值。
    • @gangqinlaohu,我看到现在更仔细地查看 KeyEvent javadocs。在 keyTyped 方法中,ke.getKeyCode() 将始终返回 VK_UNDEFINED 的 keycode。我自己只使用过 keyPressed 和 keyReleased,所以我以前从未遇到过这个问题。谢谢你指出这一点。我已更正我的答案以反映我将如何处理键盘输入,并链接到您的解决方案,该解决方案被接受为解决方案。
    • keyTyped 通常对键入的字符很有用。从 keyReleased 中获取字符往往更加困难。
    【解决方案2】:

    http://www.fileformat.info/info/unicode/char/8/index.htm

    arg0.getKeyChar() 被强制转换为int:(int)arg0.getKeyChar() 时,退格键的值为8,而Esc 键的值为27。

    【讨论】:

      【解决方案3】:

      仅适用于 java 7 / jdk1.7 及更高版本: 如果您正在检查 event.getKeyCode(),请尝试使用 event.getExtendedKeyCode() 方法。在退格的情况下,它将返回正确的代码(在本例中为 8)而不是普通的 0。这样就无需检查 \b

      if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
          System.out.println("Backspace pressed");
      }
      

      【讨论】:

        【解决方案4】:

        我知道这是一个非常古老的主题,但我想添加一个我发现对解决同样问题有很大帮助的答案。

        我正在为 Java 程序进行聊天输入,最好使用 KeyTyped 而不是按下和释放(因为它不需要过滤大多数字符)。无论如何,我想让退格删除字符,但 .getKeyCode() 根据文档总是返回 0 。但是,您可以使用 .getKeyChar() 来返回字符(可能会显示为一个方框),并使用转义字符 '\b' 进行比较。

        if(tmp.getKeyChar().equals('\b')) { ... }
        

        【讨论】:

          【解决方案5】:

          您也可以在keyTyped 中使用e.getExtendedKeyCode(),它会返回看起来正确的非零值。

          【讨论】:

            【解决方案6】:

            就个人而言,我更喜欢将 KeyPressed 事件用于除字母/数字以外的键,因为当您键入 Backspace 或 Enter 键时,实际上没有任何内容被输入。这是我所做的工作(确保从 javafx.scene.input 导入 KeyCode 和 KeyEvent)!

            MyTextArea.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>(){
                @Override
                public void handle(KeyEvent event) {
                    if (event.getCode().equals(KeyCode.BACK_SPACE)){
                        System.out.println("Success");
                    }
                }
            });
            

            如果这对你有用,请告诉我:)

            【讨论】:

              【解决方案7】:

              检查下面的代码,我希望它对你有用。

              @FXML
              public void keyPresses(KeyEvent ke) 
              {
                  if (ke.getCode().equals(KeyCode.BACK_SPACE)) {
                      System.out.println("It Works Backspace pressed..!");
                  }
              }
              

              【讨论】:

              • 您的答案是针对 JavaFX,而问题是针对 Swing。
              猜你喜欢
              • 1970-01-01
              • 2012-01-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-04-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多