javafx root -fx-font-size和em大小调整

时间:2018-01-15 00:05:07

标签: javafx root font-size em

我尝试使用root字体大小和' em'来尝试调整布局元素的大小。值。看起来每当我触摸" -fx-font-size属性,root的字体大小被重置为基值(1em = 12px)。

对于简单的fxml:

<BorderPane fx:id="mainStack" prefWidth="600" prefHeight="400" stylesheets="/style.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <left>
      <VBox fx:id="leftPane">
         <Button text="btn1"></Button>
         <Button text="btn2" styleClass="textBigger"></Button>
         <Button text="btn3"></Button>
      </VBox>
   </left>
</BorderPane>

和css喜欢:

.root {
    -fx-font-size: 10px;
    -fx-background-color: Lime;
}
#leftPane {
    /*-fx-font-size: 10px;*/
    -fx-background-color: Green;
    -fx-pref-width: 40em;
    -fx-spacing: 1em;
}
.button {
    -fx-background-color: Yellow;
    -fx-pref-height: 5em;
    -fx-pref-width: 20em;
}

#leftPane .textBigger {
    -fx-font-size: 1.5em;
}

示例1适用于root -fx-font-size = 10 样本2用于root -fx-font-size = 20

enter image description here

按钮1和3以及整体布局如预期,但在按钮2上,pref-width和pref-height被占用为12而不是10或20.因此按钮2的大小始终为240x60。

我在这里做错了什么,或者有人知道如何防止root -fx-font-size&#34; reset&#34;的解决方案。

鲍尔泰克

1 个答案:

答案 0 :(得分:1)

是的,这是javafx.scene.CssStyleHelper的BUG,请看代码行1388:

boolean isFontProperty = "-fx-font".equals(property) || "-fx-font-size".equals(property);

然后1392:

boolean isRelative = ParsedValueImpl.containsFontRelativeSize(resolved, isFontProperty);

和1444:

// did we get a fontValue from the preceding block?
// if not, get it from our cacheEntry or choose the default
if (fontForFontRelativeSizes == null) {
    if (fontFromCacheEntry != null && fontFromCacheEntry.isRelative() == false) {
        fontForFontRelativeSizes = (Font)fontFromCacheEntry.getValue();
    } else {
        fontForFontRelativeSizes = Font.getDefault();
    }
}

必须在https://bugreport.java.com/bugreport/submit_start.do下修改,ID:9055560。

作为解决方法 - 定义-fx-font-size:XXXem;不是在.control-class中,而是深入,例如在.text-class中,在你的情况下:

#leftPane .textBigger .text {
    -fx-font-size: 1.5em;
}

然后-fx-font-size:2em;仅属于.text类,不会影响更高的.textBigger类。