设置默认 JavaFX 对话框的样式

2024-04-28

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

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

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

有什么建议么?

Edit:

自从 José Pereda 发布了解决方案后,我创建了自己的dialog.css。 我将其发布在这里,因为它涵盖了整个对话框,也许有人想要复制并粘贴它。注意 .dialog-pane 已经是给定的 styleClass 名称,因此您不需要应用自己的 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;
}

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

你将得到你的风格对话框:

Note that being a bss file under private packages, these selectors can change without notice in future releases.

EDIT

我刚刚发现.dialog-pane选择器已经是摩德纳.css http://hg.openjdk.java.net/openjfx/8u40/rt/file/6cc08ec1ea82/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/modena/modena.css在过去的 8 点 40 分早期版本 https://jdk8.java.net/download.html,因此您可以在那里找到应用于对话框窗格的所有选择器和规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置默认 JavaFX 对话框的样式 的相关文章

  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • mobileapplication.mobileevent BACK_BUTTON_PRESSED

    我的两个视图中有 2 个 Android 本机音频实例 当用户按下后退按钮并离开视图时 我试图让音频停止 因为它不会自动发生 我查看了文档并看到了 MobileEvent 类 我尝试实现它的构造函数 但没有成功 这是我的第一个应用程序 为此
  • Windows 窗体中的提示对话框

    我在用System Windows Forms但奇怪的是没有能力创造它们 如何在没有 javascript 的情况下获得类似 javascript 提示对话框的内容 MessageBox 很好 但是用户无法输入内容 我希望用户输入任何可能的
  • JavaFX 打印自定义纸张尺寸

    在 JavaFX 中 我想将照片打印到 10x15 的纸张上 有一些纸张常数 但没有 100x150 mm 常数 是否可以创建自己的纸张以在页面布局中使用它 Thanks PageLayout pageLayout printer crea
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • 在JavaFX中如何在表视图中添加带有数据的组合框

    我已经尝试了很多 但无法将数据库中的所有值填充到我的组合框表格单元格中 控制器 java public class controller GetConnection gc new GetConnection PreparedStatemen
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta
  • JavaFX webview 不保存cookie

    我对 JavaFX 还很陌生 需要使用浏览器窗口编写应用程序 浏览器将用于登录微图库机构 fotolia 以解决登录时出现的验证码 显然 当关闭并稍后重新启动我的应用程序时 cookie 不会被保存 有没有办法在 JavaFX webvie
  • 当线程完成这项工作时,我是否需要使用 JavaFX 中的线程和任务在后台运行某些内容?

    我正在使用一个线程定期运行三秒的背景动画 我改编了用 Swing 编写的线程演示示例中的相关代码并使用 它取代了一个不太工作的早期版本 该版本同时使用了线程和任务 我的程序在播放视频或运行动画时停止 挂起线程 并在结束视频或动画时启动新线程
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • 如何将 CSS 样式表附加到 FXML?

    遵循 Oracle 教程http docs oracle com javafx 2 get started fxml tutorial htm http docs oracle com javafx 2 get started fxml t
  • JavaFX 应用程序隐藏 OSX 停靠图标

    我需要隐藏 javafx 应用程序的停靠图标 在普通的 java 应用程序中 这可以通过以下属性来实现 System setProperty apple awt UIElement true 然而 这似乎不适用于 JavaFX Thanks
  • JavaFX 可以在 Android 上运行吗?

    如果不这样做那就太可惜了 因为这将使 Android 应用程序看起来更有吸引力 现在还不行 要让它发挥作用将是一项艰巨的任务 Android 不具备典型桌面 JRE 所具备的所有库 尽管Android是开源的并且它会运行任何可以编译为Dal
  • 如何在 Java FX 中以编程方式模拟箭头键按下

    我想让我的 JFX 应用程序模拟箭头键按下 当它们在 TextField 中注册时 但我不知道如何发送字符串或字节以外的任何内容 我正在想象这样的事情 static EventHandler
  • JavaFX:使用常量字符串前缀绑定 StringProperty

    我对 JavaFX 中的绑定功能有疑问 我想要的是绑定 2 个字符串属性 但他们的价值观不应该是平等的 让我举个例子 我有一个 StringProperty 代表我的应用程序中最后打开的项目 该值类似于 C temp myProject p
  • 调用android对话框而不淡化背景

    我有一个很好的对话框视图 我将 UserInputDialog 类设置为
  • 进入活动后设置自定义对话框

    我的列表活动由多行组成 每行打开活动包含文本和两个按钮 其中一个打开无限图库 另一个打开对话框 每个对话框都有不同的字符串 我有 20 行 所以我添加了 20 次对话框 这是多余的 而且它工作正常 但我认为有比我所做的更好的方法 任何获得它
  • JFrame 中的 JavaFX 菜单

    我想在 JFrame 中使用 JavaFX 菜单 我使用 JFXPanel 嵌入它 并且它在 JFrame 中可见 但是 问题是 菜单项不响应鼠标 我可以单击菜单 但不能单击菜单项 如果我使用键盘选择 MenuItem 并按 Enter 键
  • 如何在JavaFX中有效地滚动和缩放大图像?

    作为图像处理应用程序的一部分 我需要创建具有缩放 滚动和矢量叠加功能的简单查看器模块 图像相当大 40000x20000 这使得 ImageView 上的操作变慢 缓冲等 在 JavaFX 中处理巨大图像时 改善用户体验的最佳选项是什么 我
  • 如何强制 JavaFX 字体抗锯齿?

    在测试 JavaFX 8 应用程序的 GUI 时 我注意到某些标签不显示抗锯齿文本 经过一番谷歌搜索和挣扎后 我发现正在发生一件非常烦人的事情 抗锯齿仅应用于字体大小大于 80 像素的标签 下面是一个比较应用了 AA 的 JavaFX 和

随机推荐