2016-09-12 1 views
1

Ich habe das folgende Problem im einfachen JavaFX-Projekt beobachtet. In NetBeans habe ich ein einfaches FXML-Projekt erstellt. Es enthält die FXML DateiJava FX Farbe des Labels ist vergessen

<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> 

Die Farbe des Etiketts richtig richtig in FX Szene Builder angezeigt wird, aber wenn ich Vorschaufunktion Scene Builder ist falsche Farbe des Etiketts sehen. Ich sehe weiße Schrift im grauen Backend. Falls ich den Build dieses einfachen Projekts erstelle, sehe ich die gleichen falschen Farben. Was ist der Grund für dieses Problem? Scheint mir die korrekte Definition von Farben nicht in Build enthalten. Ich benutze

  1. Netbeans 8.1
  2. Java SDK 8 64-Bit.
  3. Windows 7 64-Bit

Danke im Voraus

+0

Was i s die erwartete Ausgabe? Im SceneBuilder sehe ich nichts. Wird das erwartet? Was ist die erwartete Hintergrundfarbe? – fabian

+0

Erwartete Ausgabe ist im ersten Fall würde ich gerne rote Schrift auf weißem Hintergrund sehen, in anderen Fällen würde ich gerne blaue Schrift auf weißem Hintergrund sehen. Wenn ich die Anwendung starte, sehe ich weiße Schrift auf grauem Hintergrund. Erwartete Ausgabe ist – Alexander

+0

Haben Sie irgendeine CSS für das Ändern des VBOX-Hintergrundes? Wie Sie erwarten, dass es sich ändert? – GOXR3PLUS

Antwort

1

Einige Möglichkeiten, um das erwartete Ergebnis zu erhalten, ist:

~> 1) Wenn Sie diesen Stil halten wird dies empfohlen

im SceneViewer manuell die Hintergrundfarbe jedes VBox oder Etikett mit Inline-CSS hinzufügen:

-fx-background-color:white; 

~> 2) Best practice

hinzufügen styleclass auf jeder VBox oder Beschriften durch SceneViewer und eine externe CSS-Datei für Ihre Anwendung:

.styleClassName { 

     -fx-background-color:white; 

    } 

~ > 3)

Sie können eine eindeutige ID für jede VBox hinzuzufügen oder Beschriften Sie haben und ihren Stil in die Verwendung von Java-Code ändern:

elementID.setStyle(" -fx-background-color:white; "); 

dass Erwähnen: Der Standardhintergrundfarbe der meisten JavaFX-Layouts ist wie grau, so dass Sie muss es ändern.

2

Ich fürchte irgendwie SceneBuilder hat den Effekt falsch.

Sie verwenden die BlendMode.COLOR_DODGE.

Vom Javadoc-:

unteren Eingabefarbkomponenten werden durch die Inverse der oberen Eingangsfarbkomponenten unterteilt, um die sich ergebende Farbe zu erzeugen.

So die Hintergrundfarbe Komponente gegeben B und die Textfarbe Komponente T die Komponente des Ausgangs P als

berechnet
P = min(B/(1 - T), 1) 

(Komponenten in Bereich [0, 1] hier)

Keines Die Farbkomponenten der Farben, die Sie für die Textfarbe Label verwenden, sind dunkler als 0.13, also B/(1 - T) >= B/0.87 bedeutet, dass eine Hintergrundfarbe mit den Komponenten (0.87, 0.87, 0.87) oder heller als weiße Farbe angezeigt wird. Dies ist der Fall für den Standardhintergrund in einer JavaFX-Szene. So ist Weiß die erwartete Farbe.

Vielleicht sollten Sie eine andere blendMode oder ändern Sie den AnchorPane Hintergrund zu etwas verwenden, dunkler, um die Farben des Textes zu sehen:

<AnchorPane style="-fx-background-color: #888;" ... 

Meine Vermutung ist, dass Sie brauchen keine blendMode anders der Standard (SRC_OVER), sondern brauchen nur den Hintergrund der AnchorPane anzupassen:

<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>