13

KeyTyped方法内部,我如何判断是否BackspaceEsc正在被按下?

4

7 回答 7

23

假设您已正确附加 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 虚拟键码的列表。关于 KeyListeners 的更多信息可以在这里找到:How to Write a Key Listener。要按要求使用 keyTyped 方法,请参阅gangqinlaohu 的回答

于 2013-03-29T04:55:31.010 回答
6

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

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

于 2013-03-28T23:24:45.823 回答
4

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

if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
    System.out.println("Backspace pressed");
}
于 2015-08-06T21:46:48.370 回答
3

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

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

if(tmp.getKeyChar().equals('\b')) { ... }
于 2015-05-22T23:18:51.253 回答
0

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

于 2016-04-09T15:15:08.397 回答
0

就个人而言,我更喜欢将 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");
        }
    }
});

让我知道这是否对您有用:)

于 2017-07-25T21:53:04.217 回答
-1

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

@FXML
public void keyPresses(KeyEvent ke) 
{
    if (ke.getCode().equals(KeyCode.BACK_SPACE)) {
        System.out.println("It Works Backspace pressed..!");
    }
}
于 2017-01-20T21:15:05.230 回答