有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JTextfield中正确实现SHIFT+退格键笔划

所以我有一个基本的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键时,确实会出现Backspace键,但Backspace键也会像通常一样从文本框中删除单个字符

当按住SHIFT键时,是否有方法防止Backspace从文本框中删除字符


共 (2) 个答案

  1. # 2 楼答案

    虽然解决方案有效,但您采取了错误的方法(IMHO)

    您应该利用KeyBindingsAPI

    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