【问题标题】:Why do keybindings stop working after pressing the corresponding button?为什么按键绑定在按下相应按钮后停止工作?
【发布时间】:2016-03-09 17:05:31
【问题描述】:

我正在使用 Java、Swing 创建一个简单的计算器程序。

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

问题来了,用我的鼠标按下按钮后,键绑定停止工作

这是按下数字 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?
  • 如何解决此问题?

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

P.S.:我感觉这与我将键绑定到frame.getRootPane()这一事实有关

【问题讨论】:

    标签: java swing key-bindings


    【解决方案1】:

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

    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。

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多