【发布时间】:2019-01-14 15:57:14
【问题描述】:
如果按下 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,则应在模型中设置一个名为“锁定”或“保护”的附加标志,这将防止状态可以被被应用程序的一些其他逻辑覆盖。
这应该给出一个关于用例的想法,但如果不是,这对我的实际问题并不重要:我怎样才能使CheckBox 仍然可以切换(或Button 是按下)即使用户按下了修饰键?
感谢您的帮助!
【问题讨论】:
标签: javafx mouseevent modifier-key