样式化默认JavaFX对话框

时间:2015-02-09 18:53:17

标签: javafx dialog javafx-8

我正在寻找一种方法来设置默认的JavaFX对话框(javafx.scene.control.Dialog)。

我试图获取DialogPane并添加样式表,但它只涵盖了对话框的一小部分。我更喜欢只使用外部css文件设置样式,而不在代码上添加styleClasses。这看起来很混乱(标题,内容,内容上的内容以及更多内容......)

我已经googled很多,只找到了ControlsFX的例子,但是因为jdk8_40 JavaFX拥有它自己的Dialogs,所以我现在就使用它们。

有什么建议吗?

修改

自JoséPereda发布解决方案后,我创建了自己的dialog.css。 我会在这里发布,因为它涵盖整个对话框,也许有人想要复制和粘贴它。注意.dialog-pane已经是给定的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 个答案:

答案 0 :(得分:48)

您可以使用自己的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");

现在的诀窍是知道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选择器已经是最后8u40 modena.cssearly versions的一部分,因此您可以找到应用于对话框窗格的所有选择器和规则