it-swarm.com.de

Wie ändern Sie die Hintergrundfarbe eines TextFelds, ohne den Rahmen in Javafx zu ändern?

Ich versuche die Hintergrundfarbe meines TextFields "colorBox0" in "value0" zu ändern, aber es wird der Rahmen entfernt.
Hier ist eine vereinfachte Version meines Codes:

   static Paint value0 = Paint.valueOf("FFFFFF");
   TextField colorBox0;
   colorBox0.setBackground(new Background(new BackgroundFill(value0, CornerRadii.EMPTY, Insets.EMPTY)));

Jede Hilfe wird sehr geschätzt
Vielen Dank

10
sazzy4o

Ich habe festgestellt, dass Sie eine Zeichenfolge aus CSS-Code aus einer Zeichenfolge und einer Variablen erstellen können, indem Sie die to-Zeichenfolge-Methode und die Teilzeichenfolge-Methode wie folgt verwenden:

colorBox0
.setStyle("-fx-control-inner-background: #"+value0.toString().substring(2));
11
sazzy4o

Ein Blick auf die (verkürzten) Standard-JavaFX-Stile für die TextField erklärt eine Menge:

.text-input {
  -fx-background-color: linear-gradient(to bottom, derive(-fx-text-box-border, -10%), -fx-text-box-border),
    linear-gradient(from 0px 0px to 0px 5px, derive(-fx-control-inner-background, -9%), -fx-control-inner-background);
  -fx-background-insets: 0, 1;
  -fx-background-radius: 3, 2;
}

Der Hintergrund ist also ein mehrschichtiger Hintergrund, der die Grenze enthält. Diese Technik wird in JavaFX häufig verwendet. Es ist jedoch sehr einfach, nur eine Farbe zu ändern.

Zuerst müssen wir unserer TextField eine neue benutzerdefinierte Stilklasse zuweisen:

TextField textField = new TextField();
textField.getStyleClass().add("custom");

und die CSS-Datei:

.custom {
  -fx-control-inner-background: orange;
}

Wie Sie sehen, müssen Sie nicht alle Stile des Textfelds überschreiben. Es reicht aus, nur die für den Hintergrund verwendete Farbvariable zu überschreiben.

7
eckig

Versuchen Sie die Farbe mit CSS einzustellen: 

TextField colorBox0;
colorBox0.setStyle("-fx-background-color: white;");
3
javaHunter

Elegante Lösung mit Farbübersetzung:

static Paint black = Paint.valueOf(Integer.toHexString(Color.BLACK.hashCode()));
TextField textfield;
textField.setStyle(
"-fx-control-inner-background: #"+black.toString().substring(2));
0