Java KeyListener:KeyTyped Backspace、Esc 作为输入

问题描述 投票:0回答:7

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

java keylistener backspace
7个回答
26
投票

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

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

KeyEvent 类 javadocs 可以在以下链接找到:KeyEvent javadocs
在那里,您可以找到用于在实现 Java KeyListener 和 KeyEvent 时检测键盘输入的所有 Java 虚拟键码的列表。有关 KeyListener 的更多信息可以在这里找到:如何编写 Key Listener。要按照要求使用 keyTyped 方法,请参阅gangqinlaohu 的回答


7
投票

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

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


5
投票

仅适用于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() 返回字符(可能会显示为方框),并使用转义字符 ' ' 进行比较。

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

0
投票

您还可以在

e.getExtendedKeyCode()
中使用
keyTyped
,它会返回显示正确的非零值。


0
投票

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

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

0
投票

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

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");
        }
    }
});

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

© www.soinside.com 2019 - 2024. All rights reserved.