Подтвердить что ты не робот

Разделение по умолчанию диалоговых окон JavaFX

Я ищу способ создания стандартного диалога JavaFX по умолчанию (javafx.scene.control.Dialog).

Я попытался получить DialogPane и добавить таблицу стилей, но он охватывает только небольшой фрагмент диалога. Я предпочел бы стиль только с внешним файлом css и без добавления styleClasses над кодом. Это выглядело бы грязным (заголовок, контент, собственный контент в контенте и т.д.)

Я googled уже много и только нашел примеры для ControlsFX, но поскольку jdk8_40 JavaFX имеет свои собственные Dialogs, я использую их сейчас.

Любые предложения?

Edit:

Поскольку Хосе Переда отправил решение, я создал свой собственный dialog.css. Я отправлю его здесь, потому что он охватывает весь диалог, и, возможно, кто-то хочет скопировать и вставить его. Примечание. Диалоговое окно - это уже заданное имя стиля StyleClass, поэтому вам не нужно применять свои собственные. Конечно, Хосес более подробно описан.

.dialog-pane {
    -fx-background-color: black;
}

.dialog-pane .label {
    -fx-text-fill: white;
}

.dialog-pane:header .header-panel {
    -fx-background-color: black;
}

.dialog-pane:header .header-panel .label {
    -fx-font-style: italic;
    -fx-font-size: 2em;
}
4b9b3361

Ответ 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;
}

И у вас будет диалог с вашим стилем:

Styled dialog

Обратите внимание, что, будучи bss файлом в частных пакетах, эти селекторы могут меняться без предупреждения в будущих выпусках.

ИЗМЕНИТЬ

Я только что нашел, что селектор .dialog-pane уже является частью modena.css в предыдущем 8u40 раннем версии, поэтому вы можете найти все селектора и правила, применяемые к области диалога там.