css - 动态更改 CSS 中特定类的 JavaFX 属性

标签 css javafx javafx-8

我正在编写允许用户为应用程序构建主题的代码,因此他们需要能够有效地传达他们想要更改 JavaFX 的某些元素的内容。

假设我在每个 View 的顶部都有一个栏,让用户可以更改某些事物的外观:按钮、标签、文本等。

这是我正在使用的基本样式表。它只是将样式放在根和按钮上。

basetheme.css

  .root {
            -fx-background-color: "teal";
    }
    
    Button { 
        -fx-background-color: "orange";
        -fx-font-size: 2em;
        -fx-text-fill: #0000ff
    }

现在,我拥有的所有 View 在每次加载时都会加载此工作表:

view.getStylesheets().add("views/basetheme.css");

此处的 Button 类及其 fx 属性将应用于 view 中的所有按钮。 这是我想要的行为。我希望用户在运行时能够控制 Button 及其属性。

例如,如果他们想将 Button 的 -fx-font-size 属性从 -fx-font-size: 2em 更改为 -fx-font -size: 3em,他们可以做到。这可能吗?

目前,我知道 setStyle 会在某些元素上设置属性,但我正在寻找一种方法来实现这一点,不仅适用于单个 Button、Label 等,而且适用于所有这些元素。我希望有运行时更改。例如,在用户更改某些元素(如按钮)及其属性之一后,它会重新加载该 View 并应用更改。

我想做类似 view.setStyle("Button: some properties") 的操作,然后将这些属性添加到 Button 类或覆盖它,而不是 view.setStyle("some properties") 将属性添加到根。后者不会识别该属性出现在按钮上,更不用说 View 中的所有按钮了。

这可能无法以这种方式工作的明显原因是,当我们执行那些内联 setStyle 调用时,我们并没有真正更改 css 文件,只是设置现有属性,因此内联具有更高的优先级并被更新。

我知道我在技术上可以做 somebutton.setStyle("some properties"),但我希望用户能够修改所有 Button 元素的属性,方法是在 View 的根部指定它,这样样式就会向下渗透到子元素在 View 中。这使事情变得更容易。

最佳答案

您可以使用 CSSFx 不断拉取由您的应用编写的 CSS 文件。

关于css - 动态更改 CSS 中特定类的 JavaFX 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64961764/

相关文章:

Java FX 8,无法设置文本字段的值

JavaFX 8 : How to remove the last white pixel from the combobox list

html - 拉伸(stretch)图像以填充浏览器窗口的宽度

html - 如何摆脱 2 个 html 表之间的额外空间?

java - Swing 到 JavaFX - 相当于覆盖按钮的 isEnabled() 方法?

JavaFX 11 : IllegalAccessError when creating Label

JavaFx:ListView CheckBoxListCell 选择

css - 从一个动画过渡到另一个动画

html - PHP 文件中的背景图像未显示

java - 在 swing 项目中使用 JavaFx 应用程序