Ответ 1
Вы можете создавать свои диалоги с помощью собственного файла css, но для этого вам нужно принять во внимание, что диалог на самом деле представляет собой новый этап с новой сценой, а корень node - это экземпляр DialogPane
.
Итак, как только вы создадите экземпляр диалогового окна:
@Override
public void start(Stage primaryStage) {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog");
alert.setHeaderText("This is a Custom Confirmation Dialog");
alert.setContentText("We override the style classes of the dialog");
...
}
вы можете получить доступ к своей панели диалога и добавить свою собственную таблицу стилей и свой собственный селектор классов:
DialogPane dialogPane = alert.getDialogPane();
dialogPane.getStylesheets().add(
getClass().getResource("myDialogs.css").toExternalForm());
dialogPane.getStyleClass().add("myDialog");
Теперь трюк - это знание всех правил, которые по умолчанию выполнила таблица стилей Dialog
.
И это сложная задача... поскольку они не находятся в файле modena.css
, как и для всех обычных элементов управления. Напротив, они находятся в файле modena.bss
, двоичном файле, расположенном в jfxrt.jar в частных пакетах.
После некоторого копания мне удалось получить эти правила, поэтому ваш пользовательский myDialogs.css
файл будет выглядеть примерно так:
.myDialog{
-fx-background-color: #f9d900;
}
.myDialog > *.button-bar > *.container{
-fx-background-color: #a9e200;
}
.myDialog > *.label.content{
-fx-font-size: 14px;
-fx-font-weight: bold;
}
.myDialog:header *.header-panel{
-fx-background-color: #a59c31;
}
.myDialog:header *.header-panel *.label{
-fx-font-size: 18px;
-fx-font-style: italic;
-fx-fill: #292929;
}
И у вас будет диалог с вашим стилем:
Обратите внимание, что, будучи bss файлом в частных пакетах, эти селекторы могут меняться без предупреждения в будущих выпусках.
ИЗМЕНИТЬ
Я только что нашел, что селектор .dialog-pane
уже является частью modena.css в предыдущем 8u40 раннем версии, поэтому вы можете найти все селектора и правила, применяемые к области диалога там.