2014-12-30 63 views
8

Sto provando a cambiare il colore di sfondo del mio campo di testo "colorBox0" a "valore0" ma mi sbarazza del bordo.
Qui è una versione semplificata del mio codice:Come si cambia il colore di sfondo di un campo di testo senza cambiare il bordo in javafx?

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

Qualsiasi aiuto è molto apprezzato
Grazie

+0

Wow, questo è frustrante ... –

risposta

11

ho scoperto che si può costruire una stringa di codice css di una stringa e una variabile utilizzando il metodo di stringa e il metodo substring in questo modo:

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

tenta di impostare il colore usando i CSS:

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

Non sta funzionando. Cambia anche i confini. Per tutti quelli che troveranno questa risposta. –

+0

Come l'OP ha scoperto, l'uso di '-fx-control-inner-background invece di' -fx-background-color' funziona comunque. –

6

Guardando la (abbreviato) Gli stili JavaFX predefiniti per il TextField spiegano molto:

.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; 
} 

Quindi lo sfondo è uno sfondo a più livelli che include il bordo. Questa tecnica è molto utilizzata in JavaFX. Ma è molto semplice modificare un solo colore.

In primo luogo abbiamo bisogno di assegnare una nuova classe di stile personalizzata per il nostro TextField:

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

e il file CSS:

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

Come si può vedere, non c'è bisogno di sostituire tutti gli stili del campo di testo, è sufficiente ignorare solo la variabile di colore utilizzata per lo sfondo.

+0

C'è un modo per impostare il colore di sfondo sul valore di valore0 perché voglio essere in grado di modificare il valore0 e cambiare il colore di sfondo – sazzy4o

+0

Programmitally cambiando questo si ripristineranno tutti i colori di sfondo. Ma puoi anche cambiare i colori tramite CSS in fase di esecuzione. Ad esempio cambiando la classe di stile o uno stato di pseudoclass. – eckig

+1

Ho usato una versione modificata del tuo css per risolverlo – sazzy4o