我有一个JavaFX应用程序。 TabPane中的某些选项卡有一个“my-view”类,里面有一个复杂的结构,包括标签,文本字段等。我有一个CSS规则来设置这些子项的字体大小,如:
.my-view .label, .my-view .my-text-field-a, .my-view .my-text-field-b {
-fx-font-size: 12px;
}
我想允许用户按Ctrl- +动态增加文本大小。我真正想要的是能够动态地动态调整上述CSS中的“12px”。但是,我无法在JavaFX中看到这样做的方法。 setStyle方法仅允许为当前节点设置样式,而不是如上所述的规则。新的JavaFX 8 StyleableProperty接口似乎对我来说是错误的方向 - 它允许代码读取但不能写入CSS属性。我真的不想在代码中找到所有相关的文本字段并调用setFont; CSS规则似乎是正确的机制。
我目前认为这样做的唯一方法是为我可能想要设置的每种字体大小创建一个新类(有点像这里建议的那样:Hot to update dynamically font size)然后设置适当的类来设置大小,例如
.my-view-12 .label, .my-view-12 .my-text-field-a, .my-view-12 .my-text-field-b {
-fx-font-size: 12px;
}
.my-view-14 .label, .my-view-14 .my-text-field-a, .my-view-14 .my-text-field-b {
-fx-font-size: 14px;
}
我可以自动生成CSS(所有字体大小都说1-100),但这种方法看起来像是一个丑陋的黑客。有没有更好的方法在JavaFX中执行此操作?
答案 0 :(得分:2)
如果带有文本的所有内容都显示在" my-view" style类将使用相同的字体,然后就可以了
.my-view {
-fx-font-size: 12 px ;
}
在css文件中。
要进行更新,请选择一个节点,该节点是所有节点的祖先,这些节点具有" my-view"样式类(听起来像你的选项卡窗格会起作用,但一般情况下你可以只使用场景的根节点)并且
for (Node n: tabPane.lookupAll(".my-view")) {
n.setStyle("-fx-font-size: "+fontSize+"px;");
}
你显然需要跟踪Java代码中的字体大小,这很简单(从一开始就这样做)。
如果只有文本显示节点的一部分将改变其字体大小,您可能必须为它们提供自己的样式类,然后查找该特定样式类,而不是&# 34;我的视图"