JavaFX: bordure Rouge pour le champ de texte
J'ai un formulaire avec des champs de texte et je veux leur donner une bordure rouge si je clique sur "enregistrer", mais par exemple, rien n'a été saisie dans les champs requis, des lettres pour les "anniversaire", terrain,... .
Mes fichiers:
EditController.java, erreur.css
J'ai déjà essayé:
tfFirstName.getStyleClass().add("error");
à le retirer si ils entrent dans quelque chose de valable:
tfFirstName.getStyleClass().remove("error");
et dans le css:
.text-field.error {
-fx-border-color: red ;
-fx-border-width: 2px ;
}
Mais ça n'a rien changé.
Étonnamment,
tfFirstName.setStyle("-fx-border-color: red ; -fx-border-width: 2px ;");
(et une chaîne vide pour s'en débarrasser) fonctionne très bien mais il n'est pas "assez" si je veux ajouter plus tard.
Personne ne sait comment résoudre le css?
OriginalL'auteur Neph | 2014-06-15
Vous devez vous connecter pour publier un commentaire.
Essayer
La première définit la couleur de la bordure des lors qu'il ne porte pas, la seconde lorsqu'il est porté.
Dans la feuille de style
text-field-red-border.css
, l'exemple suivant fonctionne:Par ailleurs, si vous utilisez JavaFX 8, la faveur pseudoclasses plus de la définition de la classe directement, comme c'est plus propre (vous n'avez pas besoin de tout le laid le code de vérification que vous avez seulement ajouter de la classe de style une fois et/ou de supprimer toutes les occurrences de celui-ci) et plus efficace. Pour définir et de désactiver la pseudoclass faire:
Puis le css devrait être
(Notez la virgule au lieu de l' . entre
-text-field
eterror
.)Il ressemble également à "tfFirstName.setStyle("");" n'efface juste après il a obtenu l'ensemble. Si je veux l'effacer plus tard, il va garder la frontière.
Vous devez vous assurer que vous n'êtes pas à l'ajout de la classe de style plusieurs fois (ou lorsque vous le désactivez assurez-vous d'effacer tous les événements). La classe de style est une liste, de sorte qu'il peut contenir des valeurs en double.
Mise à jour avec un exemple complet.
Merci pour la remarque sur le pseudoclasses, tu ne connaissais pas!!!
OriginalL'auteur James_D
Lors de l'utilisation de la javafx8 moderna de style, vous pouvez l'utiliser css pour faire de la frontière similaire à la 'focus' liseré bleu:
ajouter le css comme classpath des ressources et de la charge à l'aide de:
puis l'appliquer à des champs de texte à l'aide de:
OriginalL'auteur Amit Portnoy
La solution mentionnée ci-dessus par James_D fonctionne parfaitement bien ( mais pas pour JAVAFX 8.0 ). James avons déjà mentionné les modifications de code pour JAVAFX 8.0, j'ai juste essayé et il fonctionne comme un charme. Voici la version modifiée pour JAVAFX 8.0, juste au cas où quelqu'un a besoin d'un guide de référence rapide.Tout le CRÉDIT VA À JAMES_D
}
OriginalL'auteur ATHER
Avec cela, il travaille maintenant tout à fait bien (il n'a même pas besoin de "setUpValidation"):
Et dans le css, j'ai ajouté la suite (malheureusement il n'a pas changer la largeur de la bordure avec "-fx-border-width: 2px"):
setUpValidation(...)
est juste une méthode utilitaire que j'ai écrit pour le faire ajouter et supprimer la bordure rouge lorsque le champ de texte est vide ou non vide. Il a en fait peu à voir avec votre question autre qu'elle montre ma solution fonctionne.OriginalL'auteur Neph