弹出组合框并使用键盘快捷键进行选择

时间:2012-09-11 06:34:39

标签: java swing actionlistener jcombobox key-bindings

   public static void comboBoxActionPerform(JComboBox  comboBox)
    {
        String ACTION_KEY = "myAction";

        Action actionListener = new AbstractAction()
        {   
            @Override
            public void actionPerformed(ActionEvent actionEvent)
            {
                JComboBox source = (JComboBox) actionEvent.getSource();
                source.showPopup();
                source.setFocusable(true);
            }
        };

        KeyStroke ctrlT = KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK);
        InputMap inputMap = comboBox.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        inputMap.put(ctrlT, ACTION_KEY);
        ActionMap actionMap = comboBox.getActionMap();
        actionMap.put(ACTION_KEY, actionListener);
        locationTypeComboBox.setActionMap(actionMap);
    }

我有一个com框,我调用上面的方法弹出按键上的组合框(Ctrl + L)。 它会弹出组合框。但我无法使用向上/向下键选择其中的项目。 当我按下Ctrl + L时,组合框没有聚焦。这可能是需要解决的问题。 如果我手动选择组合框然后向上/向下工作正常。需要你的帮助。

1 个答案:

答案 0 :(得分:3)

您要查找的方法是requestFocus,而不是setFocusable

    Action actionListener = new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JComboBox source = (JComboBox) actionEvent.getSource();
            source.requestFocus();
            source.showPopup();
            // source.setFocusable(true);
        }
    };
顺便说一句,重置组件的actionMap是不常见的。