JavaFX не выполняет такие события, как ActionEvent
для Button
или CheckBox
, если нажата клавиша-модификатор, например CTRL или SHIFT. Насколько я понимаю, это поведение реализовано в 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
), даже если пользователь нажимает ключ-модификатор?
Спасибо за вашу помощь!