Стили диалогов JavaFX по умолчанию

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

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

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

какие предложения?

Edit:

поскольку Хосе переда опубликовал решение, я создал свой собственный диалог.стиль 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;
}

1 ответов


вы можете стилизовать свои диалоги с помощью собственного css-файла, но для этого вам нужно учитывать, что диалог на самом деле является новым этапом, с новой сценой, а корневой узел -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");

теперь фокус в том, чтобы знать все правила a Dialog таблица стилей реализована по умолчанию.

и это трудная задача... поскольку они не находятся в modena.css файл, как и для всех обычных элементов управления. Напротив, они находятся в modena.bss file, двоичный файл, расположенный в jfxrt.банку под пакет.

после некоторого рытья мне удалось получить эти правила, поэтому ваш обычай 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 селектор уже является частью Модены.в CSS в последнем 8u40 ранние версии, поэтому вы можете найти все селекторы и правила, применяемые к диалоговой панели.