Я не рекомендую, чтобы все кнопки отвечали на , введите, поскольку это противоречит тому, как работает большинство диалоговых окон пользовательского интерфейса.
Обычно кнопка с фокусом будет срабатывать при нажатии пространства, не ввести. Однако есть специальные кнопки, которые активируются на определенных клавишах: A default button будет стрелять по введите и cancel button будет стрелять по esc. Обычно в вашем диалоговом окне вы будете иметь только один из этих специальных типов кнопок, чтобы их можно было запускать с помощью специального ускорителя клавиатуры, независимо от того, какая кнопка в данный момент имеет фокус.
Кроме того, различные системы настольных ОС имеют разные стандарты размещения кнопок по умолчанию и отмены в диалоговой системе. Это поможет пользователю легко найти эти специальные кнопки в любом диалоговом окне. Диалоговая система JavaFX реализует некоторую логику для локализации кнопок в диалогах, где пользователь будет ожидать их просмотра в разных настольных операционных системах.
Допустим, вы хотите типы кнопок из вашего примера, чтобы определить по умолчанию или отменить кнопки и помещен в правильном положении для таких кнопок для вашей операционной системы, то вы можете сделать, как показано ниже:
ButtonType buttonTypeTwo = new ButtonType(
"Two",
ButtonBar.ButtonData.OK_DONE
);
ButtonType buttonTypeThree = new ButtonType(
"Three",
ButtonBar.ButtonData.CANCEL_CLOSE
);
Примечания система JavaFX автоматически изменила положение кнопок и некоторые цвета подсветки. Когда пользователь нажимает , введите, затем «Два» сработает, когда пользователь нажмет esc, затем будет стрелять «Три». Если вы запускаете тот же код в Windows или Linux, вероятно, кнопки будут расположены по-разному, в соответствии с тем, какой стандарт позиционирования кнопок используется для этих ОС.
Если вы не хотите, JavaFX, чтобы изменить свои кнопки в соответствии со стандартами ОС, но вы хотите, чтобы они по-прежнему отвечать на ввести и ESČ ключей, то вы можете поиск кнопок и непосредственно изменять атрибуты кнопки, как показано ниже:
Button buttonTwo = (Button) alert.getDialogPane().lookupButton(buttonTypeTwo);
buttonTwo.setDefaultButton(true);
Button buttonThree = (Button) alert.getDialogPane().lookupButton(buttonTypeThree);
buttonThree.setCancelButton(true);
I recomme позволяя JavaFX правильно позиционировать кнопки определенных типов, а не выполнять поиск, как указано выше.
Я также рекомендую установить хотя бы кнопку CANCEL_CLOSE или кнопку OK_DONE в вашем предупреждении JavaFX, иначе у пользователя может быть трудное время, фактически закрывающее предупреждение, поскольку диалог, вероятно, не будет реагировать на нажатия клавиш, как ожидает пользователь.
его не работает –