кнопки по умолчанию обстрелял введите
Кнопка OK вызывается при нажатии ввести, потому что это default button.
Кнопка по умолчанию - кнопка, которая получает клавиатуру. VK_ENTER нажимает, если другой узел в сцене ее не использует.
В стандартной таблице стилей JavaFX 8 Modena по умолчанию указывается синий цвет, а не серый цвет стандартной кнопки.
Как удалить поведение кнопки по умолчанию
Вы можете удалить это поведение от предупредительного диалога, не делая кнопку OK кнопку по умолчанию:
Button okButton = (Button) alert.getDialogPane().lookupButton(ButtonType.OK);
okButton.setDefaultButton(false);
Я советую вам не делать этого , но вместо этого всегда оставлять кнопку по умолчанию в диалоговых окнах предупреждений.
На OS X, стандартные диалоги типа оповещений имеют кнопку по умолчанию, которое инициируется ввести, даже если другая кнопка сфокусирована, поэтому стандартное поведение в JavaFX согласуется с этим. Примечание. Чтобы разрешить это поведение в диалоговом окне по умолчанию в OS X, необходимо указать enable full keyboard access.
Если вы измените кнопку OK, чтобы не быть кнопкой по умолчанию, я предлагаю вам изменить свой текст на что-то другое (например, выход для Вашего случая):
okButton.setText("Exit");
Как сделать войти огонь сфокусированные кнопки
Теперь, если вы хотите сделать так, чтобы сфокусированная кнопку срабатывает при нажатии клавиши ввести, то вы можете сделать это:
EventHandler<KeyEvent> fireOnEnter = event -> {
if (KeyCode.ENTER.equals(event.getCode())
&& event.getTarget() instanceof Button) {
((Button) event.getTarget()).fire();
}
};
DialogPane dialogPane = alert.getDialogPane();
dialogPane.getButtonTypes().stream()
.map(dialogPane::lookupButton)
.forEach(button ->
button.addEventHandler(
KeyEvent.KEY_PRESSED,
fireOnEnter
)
);
Примечание: в любом случае сфокусированные кнопки всегда срабатывают при нажатии пространства.
Я считаю, что для активации сфокусированной кнопки вам нужно нажать пробел. Это верно (я думаю) не только для Java/JavaFX. Например, в собственных приглашениях Windows я использую вкладку, чтобы быстро перемещаться и пробел, чтобы активировать выбранную кнопку, а не Enter. Это из моего опыта, хотя, я не знаю, является ли это установленным руководством. –
Я думаю, что вы правы, но я просто попробовал MessageBoxButtons.YesNo в C#, мы можем активировать сфокусированную кнопку либо клавишей Enter, либо Space. –
Я вижу. Мой комментарий был скорее личного взгляда, так как он того стоит. Прочитайте его как «** I **, как пользователь, нажмите пробел, чтобы активировать сфокусированную кнопку, а не вводить». –