多个键的InputMap

时间:2014-12-19 10:19:37

标签: java swing key-bindings

我希望在我的Swing应用程序中有一个自定义Tab和Shift + Tab列表器。当按下TAB键时,这适用于JTextField textField =>

textField.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), "Tab");

    textField.getActionMap().put("Tab", new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            navigateDown();
        }
    });

但是,我希望实现Shift + Tab并且我已经使用了这段代码: -

textField.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, KeyEvent.VK_TAB), "BackTab");

    textField.getActionMap().put("BackTab", new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            navigateUp();
        }
    });

但是,这对我不起作用。谢谢你的关注。

1 个答案:

答案 0 :(得分:4)

您的击键不正确。第二个整数不是键码而是修饰符。

试试这样:

textField.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke(KeyEvent.VK_TAB, java.awt.event.InputEvent.SHIFT_DOWN_MASK), "BackTab");

textField.getActionMap().put("BackTab", new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        navigateUp();
    }
});

另请参阅Keystroke.getKeyStroke()

上的JavaDoc