标签的Java FX颜色被遗忘

时间:2016-09-12 08:13:46

标签: 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位
  4. 提前谢谢

2 个答案:

答案 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布局的默认背景颜色都像灰色,因此您必须更改它。