当前位置: 首页 > 知识库问答 >
问题:

样式化默认JavaFX对话框

洪弘亮
2023-03-14

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

我尝试获取对话框窗格并添加样式表,但它只覆盖了对话框的一小部分。我更喜欢只使用外部css文件进行样式设计,而不在代码上添加样式类。这看起来很混乱(标题、内容、内容上的自有内容等等)

我已经在谷歌上搜索了很多,只找到了ControctionFX的例子,但是由于jdk8_40 JavaFX有自己的Dialogs,我现在使用它们。

有什么建议吗?

编辑:

由于JoséPereda发布了解决方案,我创建了自己的dialog.css.我会在这里发布,因为它涵盖了整个对话框,也许有人想复制

.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个答案

罗翔
2023-03-14

您可以使用自己的css文件来设置对话框的样式,但是为此您需要考虑到对话框实际上是一个新的舞台,有一个新的场景,并且根节点是一个< code>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中。

经过一番挖掘,我设法得到了这些规则,因此您的自定义< code>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早期版本中,因此您可以在那里找到应用于对话框窗格的所有选择器和规则。

 类似资料:
  • 设置全局默认样式,将会影响所有写入单元格的样式; 函数原型 defaultFormat(resource $formatHandler) resource $formatHandler $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ $excel->fileName('tutorial

  • 问题内容: 问题: 在哪里可以找到带有十六进制颜色代码的默认样式xml? 我在寻找’buttonStyle’样式,其他默认样式会影响诸如TextViews,Buttons等方面(如果您不更改方面的样式) 我抬头望去,但实际上没有找到想要的东西。 希望我的问题清楚。 由于信誉低,我无法回答这个问题。这是答案 回答 稍作谷歌搜索,我发现’buttonStyle’实际上是’Widget.Button’-

  • ●进入编辑地图页面—>点击打开图层管理窗口—>点样式,选择渲染方式,点“确定”保存设置。 ●普通点渲染:适用于标注数量小于2000,显示风格多样化的标注渲染,支持分类显示、自定义图标、标签设置等。

  • 修改游戏基本设定 在已经调整了对话框的情况下,是否会觉得白底的对话框和黑底的姓名框,需要配上和原来不同的颜色和文字效果呢。 这时候就轮到Config.tjs上场了。 Config.tjs是吉里吉里/KAG的基本设定文件,包含了大量可以调整的细节。 不过Config.tjs所记录的只是一个默认设置,大部分功能也可以在后来的脚本里修改。 但对于游戏里随时都要用到的东西,例如说字体的默认颜色外观等等,直

  • 所以我才刚刚开始学习JavaFX,我用场景构建器做了几个文本字段。我为每个TextField分配了一些提示文本,但是当我启动应用程序时,第一个TextField已经被选中,所以我看不到提示文本。我能做点什么吗?

  • 我知道默认的验证消息文本可以这样编辑 更改默认HTML输入验证消息 但我想知道是否有一种方法将CSS作为默认验证消息框的目标 我真的很喜欢默认的验证,这是一个研究问题,我看了我的浏览器控制台尝试目标验证消息框。但浏览器并不接收它。 假设我想将验证消息的背景设置为蓝色而不是白色,或者我想更改字体大小。是否有任何was针对这些验证消息框CSS?