当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);
}
答案 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中添加的其中一个在焦点所在的地方起作用。