java - 如何在 JTextfield 内正确实现 SHIFT + BACKSPACE 按键

标签 java swing keyboard-shortcuts jtextfield keylistener

所以我有一个基本的 swing 应用程序,它包含一个 JTextfield,我向其中添加以下 KeyListener:

public class PromptKeyListener implements KeyListener {

    private boolean SHIFT_PRESSED;

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            //Do Thing A
        } else if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            this.SHIFT_PRESSED = true;
        }

                     if (SHIFT_PRESSED
                && e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
            //Do Thing B
        }

       }

    @Override
    public void keyReleased(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            this.SHIFT_PRESSED = false;
        }
        System.out.println(SHIFT_PRESSED);
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

}

问题是,当我按住 SHIFT 和 Backspace 时,确实会发生事情 B,但 Backspace 键也会像平常一样从文本框中删除单个字符。

是否有办法防止按住 SHIFT 时退格键从文本框中删除字符?

最佳答案

虽然该解决方案有效,但您采取了错误的方法(恕我直言)。

您应该利用KeyBindings API

InputMap im = field.getInputMap(JComponent.WHEN_FOCUSED);
ActionMap am = field.getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_DOWN_MASK), "DoThingB");
am.put("DoThingB", new AbstractAction() {

    @Override
    public void actionPerformed(ActionEvent e) {

        System.out.println("Do Think B");

    }
});

此外,您不应该使用 KeyListener 来捕获 enter 键,您应该使用 ActionListener

关于java - 如何在 JTextfield 内正确实现 SHIFT + BACKSPACE 按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044328/

相关文章:

java - 在选项卡式 Pane 标题上的标签和 jButton 之间添加空格

java - 将 JTextField 输入限制为整数

asp.net-mvc - 在 Visual Studio 中快速浏览 ASP.NET MVC 应用程序

c# - 忽略 KeyBinding 中的重复(按住键 - 只执行一次命令)

windows - 使用键盘快捷键启动 powershell 脚本

java - 在此接口(interface)定义中,尖括号是什么意思?

java - "A JNI error has occurred, please check your installation and try again"运行java程序

java - Maven Hibernate 依赖项

java - 您将如何在列表上执行 removeIf 或为 eclipse 集合中的基元设置?

java - JTextfield字体和属性问题