为什么键绑定会死?

时间:2012-01-23 15:03:13

标签: java swing netbeans-6.9 key-bindings key-events

当GUI按钮按箭头键时,此应用程序需要发送电机移动命令,当GUI按钮箭头键时,需要发送电机停止命令释放。 这些绑定适用于向下箭头,直到按下相应的GUI按钮。 按下GUI按钮后,箭头键将被忽略。 如果焦点变化导致绑定被破坏,那么如何将绑定编程为独立于焦点范围? 如果没有,那么真正的问题是什么?它是如何修复的?

键绑定

Action tiltStop = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        MotorStop(TILT_AXIS);
    }
};
mainPanel.getInputMap().put(KeyStroke
    .getKeyStroke(KeyEvent.VK_DOWN, 0, true), "tiltStop");
mainPanel.getActionMap().put("tiltStop", tiltStop);
Action tiltDown = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        MotorMove(TILT_AXIS, NEGATIVE_DIR);
    }
};
mainPanel.getInputMap().put(KeyStroke
    .getKeyStroke(KeyEvent.VK_DOWN, 0, false), "tiltDown");
mainPanel.getActionMap().put("tiltDown", tiltDown);

GUI按钮

private void jButtonAxisDownMousePressed(java.awt.event.MouseEvent evt) {
    MotorMove(TILT_AXIS, NEGATIVE_DIR);
}                                              
private void jButtonAxisDownMouseReleased(java.awt.event.MouseEvent evt) {
    MotorStop(TILT_AXIS);
}                                               

3 个答案:

答案 0 :(得分:3)

  

如何将绑定编程为独立于焦点范围?

查看getInputMap()方法。有3种不同的InputMaps。你想要一个祖先,所以即使组件没有焦点也能工作。

答案 1 :(得分:0)

我对这个问题有所了解,但并不完全确定。

当您按下鼠标按钮时,它开始使用鼠标。当你松开按钮时,它仍在使用鼠标,并且它始终在那时释放,并且始终执行鼠标释放功能。因此,当它执行使其移动的键命令时,鼠标释放功能正在撤消移动 - 使其为0。

添加一个名为mousedown的布尔值,在按下时设置为true,并在release函数结束时设置为false。设置它以便当mousedown boolean为true时它只调用release函数。

答案 2 :(得分:0)

尝试getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put...而不是getInputMap().put...。这个改变对我有用,并且rootPane中添加的其中一个在焦点所在的地方起作用。