为什么按键绑定在按下相应按钮后停止工作?
Why do keybindings stop working after pressing the corresponding button?
我正在使用 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()
您为根窗格注册了您的输入,并且没有明确的条件。而是尝试为整个 window:
注册它们
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。
我正在使用 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()
您为根窗格注册了您的输入,并且没有明确的条件。而是尝试为整个 window:
注册它们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。