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
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));
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.
Essayez de définir la couleur en utilisant CSS:
TextField colorBox0;
colorBox0.setStyle("-fx-background-color: white;");
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));