web-dev-qa-db-fra.com

Comment modifier la couleur d'arrière-plan d'un TextField sans modifier la bordure dans javafx?

J'essaie de changer la couleur d'arrière-plan de mon "colorBox0" de TextField en "valeur0", mais la bordure est supprimée.
Voici une version simplifiée de mon code:

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

Toute aide est fortement appréciée
Je vous remercie

10
sazzy4o

J'ai trouvé que vous pouvez construire une chaîne de code CSS à partir d'une chaîne et d'une variable en utilisant la méthode to string et la méthode substring comme ceci:

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

L'examen des styles JavaFX par défaut (abrégés) pour la variable TextField en explique beaucoup:

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

Donc, l'arrière-plan est un fond en couches, y compris la bordure. Cette technique est beaucoup utilisée dans JavaFX. Mais il est très facile de modifier une seule couleur.

Nous devons d’abord attribuer une nouvelle classe de style personnalisée à notre TextField:

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

et le fichier CSS:

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

Comme vous pouvez le constater, il n'est pas nécessaire de remplacer tous les styles du champ de texte, il suffit simplement de remplacer la variable de couleur utilisée pour l'arrière-plan.

7
eckig

Essayez de définir la couleur en utilisant CSS: 

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

Solution élégante avec traduction des couleurs:

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