如果按下类似CTRL或SHIFT这样的修改键,JavaFX将不会执行像Button
或CheckBox
的ActionEvent
等事件。就我所知,这种行为是在ButtonBehavior
中实现的(例如,请注意该类中以下方法中的表达式!keyDown
):
@Override public void mouseReleased(MouseEvent e) {
// if armed by a mouse press instead of key press, then fire!
final ButtonBase button = getControl();
if (! keyDown && button.isArmed()) {
button.fire();
button.disarm();
}
}
首先,我并不真正理解这样做的原因。如果按下键盘上的某个键,则不触发按钮的目的是什么?
这是我的用例:我想实现一个复选框,可以像平常一样进行选中/取消选中操作。它将在模型中切换某些状态。但它应该有一个附加功能:如果用户在用鼠标选中/取消选中时按下某些键,例如CTRL,那么模型中将设置一个名为“锁定”或“保护”的额外标志,这将防止应用程序的其他逻辑覆盖该状态。
这应该给出了一个关于用例的想法,但如果没有也不要紧,因为这并不是我的实际问题:如何使一个复选框仍然可以切换(或者按下一个按钮)即使用户按下修饰键?
谢谢您的帮助!
allowIndeterminate
为真。 - Till F.