我在简单的JavaFX项目中发现了以下问题。在NetBeans中,我创建了简单的FXML项目。它包含FXML文件
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sensordemo.MainController">
<children>
<VBox blendMode="COLOR_DODGE" layoutX="14.0" layoutY="12.0" prefHeight="453.0" prefWidth="169.0">
<children>
<VBox prefHeight="147.0" prefWidth="109.0">
<children>
<Label text="XXXXX" textFill="#8c5123">
<font>
<Font name="Arial Bold Italic" size="18.0" />
</font>
</Label>
</children>
</VBox>
<VBox prefHeight="134.0" prefWidth="83.0">
<children>
<Label text="YYYYY" textFill="#23288d">
<font>
<Font name="Arial Bold Italic" size="18.0" />
</font></Label>
</children>
</VBox>
<VBox prefHeight="167.0" prefWidth="83.0">
<children>
<Label text="ZZZZZ" textFill="#23288d">
<font>
<Font name="Arial Bold Italic" size="18.0" />
</font>
</Label>
</children>
</VBox>
</children>
</VBox>
</children>
</AnchorPane>
在FX Scene Builder中正确显示标签的颜色,但如果使用Scene Builder的预览功能,则会看到错误的标签颜色。我在灰色后端看到白色字体。如果我创建这个简单项目的构建,我会看到相同的错误颜色。这个问题的原因是什么?在我看来,构建中不包含正确的颜色定义。 我用
提前谢谢
答案 0 :(得分:2)
我担心SceneBuilder会产生错误的效果。
您正在使用BlendMode.COLOR_DODGE
。
来自javadoc:
底部输入颜色分量除以顶部输入颜色分量的倒数,以产生最终颜色。
因此,给定背景颜色分量B
和文本颜色分量T
,输出P
的分量计算为
P = min(B / (1 - T), 1)
(此处[0, 1]
范围内的组件)
用于Label
文字颜色的颜色的颜色分量都不比0.13
暗,所以B / (1 - T) >= B / 0.87
表示任何背景颜色为(0.87, 0.87, 0.87)
或更亮的将显示为白色。这是JavaFX场景中的默认背景的情况。所以白色是预期的颜色。
也许您应该使用不同的blendMode
或将AnchorPane
背景更改为更暗的颜色以查看文字的颜色:
<AnchorPane style="-fx-background-color: #888;" ...
我的猜测是,您不需要blendMode
与默认值SRC_OVER
不同,但只需要调整AnchorPane
的背景:
<AnchorPane style="-fx-background-color: white;" id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1">
<children>
<VBox layoutX="14.0" layoutY="12.0" prefHeight="453.0" prefWidth="169.0">
...
</VBox>
</children>
</AnchorPane>
答案 1 :(得分:1)
获得预期结果的一些方法是:
〜&gt; 1)如果您保持这种风格,建议使用
在SceneViewer中,使用内联css手动添加每个VBox或Label的背景颜色:
-fx-background-color:white;
〜&gt; 2)最佳实践
通过SceneViewer
在每个VBox或Label上添加一个StyleClass,并为您的应用程序使用外部css文件:
.styleClassName {
-fx-background-color:white;
}
〜→3)
您可以为每个VBox或Label添加唯一ID,并使用以下命令将其样式修改为Java代码:
elementID.setStyle(" -fx-background-color:white; ");
提及: 大多数JavaFX布局的默认背景颜色都像灰色,因此您必须更改它。