【问题标题】:Java FX TitledPane .title CSS SelectorJava FX TitledPane .title CSS 选择器
【发布时间】:2015-05-12 02:50:56
【问题描述】:

在我的 JavaFX 应用程序中,我使用 TitledPane 并覆盖 Graphic 元素为我的 TitledPane 标头添加一些特殊内容。有点像我期望的那样工作。现在我试图在标题中添加一些 CSS 样式。在 JavaFX CSS 参考文档中,TitledPane 结构的定义如下:

Substructure

title — HBox
text — Label/li>
arrow-button — StackPane/li>
arrow — StackPane
content — StackPane/li>

因此我可以访问标题 hbox 的样式:

.my-titled-pane > .title {
    -fx-background-color: red;
}

这也有效。现在我的问题。我试图根据某些代码为标题元素添加特定的填充。我目前的解决方案是这样的:

[...]
myTitledPane.getStyleClass().set(0, myTitledPane.getStyleClass.get(0) + getSomeCSSStylingClass());
[...]

在 CSS 中,我为 getSomeCSSStylingClass() 返回的所有不同可能性定义了样式。

.my-titled-pane-sample-one > .title {
    -fx-padding: 10;
}

.my-titled-pane-sample-two > .title {
    -fx-padding: 10;
}

但是这个解决方案看起来很糟糕。有没有可能做得更容易更好?有什么方法可以获取.title 元素并向其添加样式类吗?

我使用的是 Java 版本:Java8_31

【问题讨论】:

    标签: css javafx javafx-8


    【解决方案1】:

    您可以使用查找来检索元素,然后设置内联样式:

    int padding = ... ;
    myTitledPane.lookup(".title").setStyle("-fx-padding: "+padding+"px;");
    

    请注意,只有在第一次 CSS 传递完成后,查找才会起作用(通常这意味着标题窗格必须显示在屏幕上);内联样式通常也不是最好的方法。但是,如果填充是通过编程确定的,那么这可能就是您想要执行此操作的方式。

    如果您确实想通过操作样式类来做到这一点,请记住节点可以有多种样式。所以我可能会做类似的事情

    .my-titled-pane > .title {
        /* common styles for title, eg */
        -fx-background-color: red ;
    }
    .style-one > .title {
        -fx-padding: 10px ;
    }
    .style-two > .title {
        -fx-padding: 12px ;
    }
    /* etc */
    

    然后在 Java 中

    myTitledPane.getStyleClass().add(getSomeCSSStyleClass());
    

    根据调用此代码的时间,您可能需要删除样式类以避免重复等。

    【讨论】:

    • 感谢您的宝贵时间。我有点认为添加多个样式类的 CSS 方式是更好的方式。刚刚试了一下,效果很好。接受并赞成。
    【解决方案2】:

    将此检查器用于 javaFx 应用程序:https://github.com/JonathanGiles/scenic-view,使用此检查器可以检查应用程序搜索节点并获取其中任何一个的 CSS 规则。

    【讨论】:

      【解决方案3】:

      我认为最好在主资源文件夹下添加一个 css 文件。 然后在您的 css 文件中,例如 (Style.css):

      .title {-fx-padding: px;}
      

      然后在你的 java 文件中添加:

      scene.getStylesheets.add("/css/Style.css")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-20
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多