忘记了标签的 Java FX 颜色

标签 java javafx javafx-2 fxml scenebuilder

我在简单的 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 的预览功能,则会看到错误的标签颜色。我在灰色后端看到白色字体。如果我创建这个简单项目的构建,我会看到相同的错误颜色。这个问题的原因是什么?在我看来,颜色的正确定义不包含在构建中。 我用

  1. Netbeans 8.1
  2. Java SDK 8 64 位。
  3. Windows 7 64 位

提前致谢

最佳答案

恐怕 SceneBuilder 弄错了效果。

您正在使用 BlendMode.COLOR_DODGE .

来自javadoc:

The bottom input color components are divided by the inverse of the top input color components to produce the resulting color.

所以给定背景色分量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>

关于忘记了标签的 Java FX 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39445937/

相关文章:

java - 测试驱动开发问题

java - 使用 MapReduce MultipleOutputs 清空输出文件

用于识别回文数的 Java 项目返回 false 并匹配输出

java - 在 JavaFX 中实现标签栏

image - 如何裁剪和调整 JavaFX 图像的大小?

JavaFX 2 : word wrapping doesn't work in ScrollPane

java - 每天自动运行一个应用程序

JavaFx 如何在 TableView 中只对齐一个列标题?

JavaFX BarChart 不更新

java - 填充 javaFX ListView 抛出异常