2014-12-30 12 views
8

Ich versuche, die Hintergrundfarbe meiner TextField "colorBox0" auf "value0" zu ändern, aber es wird die Grenze los.
Hier ist eine vereinfachte Version von meinem Code:Wie ändern Sie die Hintergrundfarbe eines TextFields, ohne den Rahmen in javafx zu ändern?

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

Jede Hilfe sehr viel
Thankyou

+0

Wow, das ist frustrierend ... –

Antwort

11

Ich fand, dass Sie eine Reihe von CSS-Code aus einem String und eine Variable unter Verwendung der auf String-Methode und die Teil Methode wie folgt konstruieren:

colorBox0 
.setStyle("-fx-control-inner-background: #"+value0.toString().substring(2)); 
2
geschätzt

Versuchen Sie, die Farbe mit CSS zu setzen:

TextField colorBox0; 
colorBox0.setStyle("-fx-background-color: white;"); 
+2

Das funktioniert nicht. Es ändert auch die Grenzen. Für alle, die diese Antwort finden. –

+0

Wie das OP herausgefunden hat, funktioniert die Verwendung von '-fx-control-inner-background' anstelle von '-fx-background-color'. –

6

Mit Blick auf die (gekürzt) 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 einschließlich der Grenze. Diese Technik wird in JavaFX häufig verwendet. Aber es ist sehr einfach, nur eine Farbe zu ändern.

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

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

und die CSS-Datei:

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

Wie Sie sehen können, Sie müssen nicht alle Stile außer Kraft setzen des Textfelds genügt es, nur die für den Hintergrund verwendete Farbvariable zu überschreiben.

+0

Gibt es eine Möglichkeit, die Hintergrundfarbe auf den Wert von Wert0 zu setzen, weil ich in der Lage sein soll, Wert0 zu ändern und die Hintergrundfarbe zu ändern – sazzy4o

+0

Programmgesteuert ändern, werden alle Hintergrundfarben zurückgesetzt. Aber Sie können die Farben zur Laufzeit auch über CSS ändern. Zum Beispiel durch Ändern der Stilklasse oder eines Pseudoklassenstatus. – eckig

+1

Ich habe eine modifizierte Version Ihres CSS verwendet, um es zu beheben – sazzy4o