【问题标题】:Styling default JavaFX Dialogs样式化默认 JavaFX 对话框
【发布时间】:2015-04-09 15:03:42
【问题描述】:

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

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

我已经用谷歌搜索了很多,只找到了 ControlsFX 的示例,但由于 jdk8_40 JavaFX 有它自己的对话框,我现在使用它们。

有什么建议吗?

编辑:

自从 José Pereda 发布解决方案后,我创建了自己的 dialog.css。 我会把它贴在这里,因为它涵盖了整个对话,也许有人想要复制和粘贴它。注意 .dialog-pane 已经是给定的 styleClass 名称,因此您无需应用自己的名称。当然,Josés 更细致。

.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;
}

【问题讨论】:

    标签: javafx dialog javafx-8


    【解决方案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");
    

    现在的诀窍是了解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 选择器已经是最后一个8u40 early versionsmodena.css 的一部分,因此您可以在那里找到应用于对话框窗格的所有选择器和规则。

    【讨论】:

    • 我刚刚编辑了我的答案,因为 modena.css 已经在最新的 8u40 ea 中包含了 .dialog-pane 选择器。我的另一篇文章是关于openjfx-dialogs,这是从 ControlsFX 中提取的中间项目,适用于 8u20、8u25 和 8u31 版本。
    • 感谢您的回答,非常有帮助!但是,我注意到使用:header 不再有效,所以我只使用了.myDialog .header-panel,效果很好。我也在使用 8u40..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多