【问题标题】:javafx - tooltip has same style as labeljavafx - 工具提示与标签具有相同的样式
【发布时间】:2015-11-21 11:31:07
【问题描述】:

在我的应用程序中,我有一个具有特定样式的标签,并且该标签有一个工具提示。 现在我更改了我的代码,以便我的标签有一个类,并在 css 中定义样式。 (效果很好)

但现在工具提示与标签具有相同的样式(在它具有标准 javafx 8 样式之前)

css:

.my-Class {
-fx-text-fill:lightblue;
-fx-font-size: 11pt;        
-fx-font-weight:bold;
-fx-font-style:italic;
}

这就是我如何创建标签的代码

Label label= new Label("i");
label.getStyleClass().add("my-Class ");
label.setTooltip(new Tooltip("xxx"));

在更改为 css 之前,工具提示是标准字体/大小/... 现在字体是粗体和斜体(但不是蓝色)

为什么会这样?以及如何将其更改回以前的方式(但使用 css 文件)

【问题讨论】:

    标签: java css javafx


    【解决方案1】:

    虽然 IMO 没有提供明确的信息,但请查看 this link 关于 CSS 继承:

    CSS 还提供了默认继承的某些属性,或者如果属性值为“继承”则被继承。如果一个值是继承的,它是从文档树中元素的父元素的计算值继承的。在 JavaFX 中,继承是类似的,只不过不是文档树中的元素,而是从场景图中的父节点继承。

    因此,您的工具提示继承了其父级的一些 CSS 属性。你怎么知道它继承了什么样的属性?看看这些行(Java 8,不是一个简单的代码!):

    Label label= new Label("i");
    label.getStyleClass().add("my-Class");
    Tooltip tooltip = new Tooltip(“xxx”);
    label.setTooltip(tooltip);
    
    List<CssMetaData< ? extends Styleable, ? >> cssProperties = ex2.getCssMetaData().stream().filter(t -> t.getProperty().equals("-fx-font")).findFirst().get().getSubProperties();
    boolean inherits = cssProperties.stream().filter(t -> t.getProperty().equals("-fx-font-style")).findFirst().get().isInherits(); // Returns true
    

    如果您检查 cssProperties 列表,您应该能够看到所有继承的相关字体属性 (inherits: true)。这个列表应该至少返回四种css样式,其中出现了-fx-font-style-fx-font-weight

    总而言之,如果您希望工具提示具有常规样式和大小,则必须在工具提示中添加新的 CSS 样式:

    .my-Tooltip {
    -fx-font-size: 11pt;        
    -fx-font-weight: normal;
    -fx-font-style: normal;
    }   
    

    否则,它将始终继承其父级的样式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      相关资源
      最近更新 更多