Обновление псевдокласса :armed
недостаточно, если вы хотите, чтобы действие Button
запускалось щелчком правой кнопки мыши.Вам на самом деле нужно вооружить Button
.Другими словами, вам нужно изменить свойство armed
на true
.Кроме того, обновление свойства armed
обновит для вас псевдокласс.
Поскольку свойство armed
доступно только для чтения, вы не можете установить его напрямую;Вам нужно позвонить arm()
и disarm()
.Вам также может понадобиться вручную позвонить fire()
(подробно описано ниже).Вот пример:
Button button = new Button("Click Me!");
button.setOnAction(event -> System.out.println("Button clicked!"));
button.setOnMousePressed(event -> {
if (event.getButton() == MouseButton.SECONDARY) {
button.arm();
}
});
button.setOnMouseReleased(event -> {
if (button.isArmed()) {
button.disarm();
button.fire();
}
});
Однако вам, похоже, совсем не нужен обработчик onMouseReleased
- по крайней мере, в JavaFX 11 и 12, с использованием стиля / поведения Button'
по умолчанию.Класс поведения Button
будет запускать действие, если указанное Button
поставлено на охрану во время отпускания мыши (и ни одна из клавиш не нажата).Обратите внимание, что класс поведения по умолчанию выполняет более сложную проверку относительно того, какой MouseButton
был использован (то есть он делает больше, чем просто проверка event.getButton() == MouseButton.PRIMARY
).Вы можете увидеть реализацию для себя здесь .
Все это говорит о том, что если вы хотите, чтобы визуальные изменения только изменились, вам следует использовать подход, показанный в ответ Саи .