按下相应的按钮后,为什么键绑定会停止工作?

时间:2016-03-09 17:05:31

标签: java swing key-bindings

我正在使用Java,Swing创建一个简单的Calculator程序。

键绑定工作正常。嗯......差不多。我运行软件,按下数字按钮,一切顺利,就像它应该的那样。然后,我用鼠标按下了一些按钮,但到目前为止一切都很好。

问题出现时,用鼠标按下按钮后,键绑定停止工作

这是按下数字0的代码(其余按钮的代码以相同的方式实现)。

actions[0] = new press0Action();
frame.getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD0, 0), "0");
frame.getRootPane().getRootPane().getActionMap().put("0", actions[0]);
private class press0Action extends AbstractAction {
        @Override
        public void actionPerformed(ActionEvent e) {
            buttons[0].doClick();
        }
    }
private void buttonPressed0() {
        buttons[0].addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Code goes here for pressin the button...
        });
    }
  • 那么为什么我不能在点击按钮后使用键盘 用鼠标手动GUI?
  • 如何解决此问题?

感谢您提前回答!随意添加任何改进建议。

PS: 我感觉这与我将frame.getRootPane() 键绑定的事实有关

1 个答案:

答案 0 :(得分:3)

您已注册根窗格的输入,并且没有明确的条件。而是尝试将它们注册到整个窗口:

actions[0] = new press0Action();
frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD0, 0), "0");
frame.getRootPane().getRootPane().getActionMap().put("0", actions[0]);

注意带参数的备用getInputMap。