Javafx est la nouvelle bibliothèque standard utilisée dans Java pour créer des applications graphiques, mais de nombreux programmeurs s'en tiennent toujours à l'utilisation de Swing ou même AWT. Voici quelques suggestions sur la façon de créer des applications réactives et rapides avec de nouvelles fonctionnalités impressionnantes dans l'ensemble d'outils Javafx!
1. Valeur d'attribut
Si vous avez une compréhension complète des composants Javafx, Mobile a rencontré la propriété. Presque toutes les valeurs de la bibliothèque FX peuvent être observées, la largeur de la partition, la taille de l'image, le texte de l'étiquette, les éléments de l'enfant dans une liste et l'état de la case à cocher. Les attributs sont divisés en alternatives: attributs écrit et attributs lisibles. Les valeurs écrivables peuvent être modifiées, en utilisant la méthode du secteur ou directement. Javafx gère le processus de gestion des événements et garantit que chaque composant qui dépend de cette propriété est notifié. Les propriétés lisibles ont des méthodes qui vous permettent de recevoir des notifications lorsque leurs valeurs sont modifiées.
Exemple:
// lisible et écrivable stringProperty name = new simplistringProperty ("emil"); // en lecture seule observablebooleanValue nameIsEmpty = name.iSempty ();2. Valeur de liaison
Lorsque vous avez une valeur écrite et lisible, vous pouvez commencer à définir des règles sur la façon dont ces valeurs sont associées. Une propriété écrivative peut être liée à une propriété lisible, donc sa valeur correspondra toujours à celle lisible. Les liaisons ne se produisent pas immédiatement, mais elles seront faites avant que la valeur ne soit observée (et regardez ce que j'ai fait là-bas). La liaison peut être unidirectionnelle ou bidirectionnelle. Bien sûr, s'ils sont bidirectionnels, les deux propriétés doivent être écrivables.
Exemple:
TextField Fielda = new TextField (); TextField FieldB = new TextField (); fielda.PrefWidthProperty (). Bind (FieldB.WidthProperty ());
3. Liste observable
Les attributs ne sont pas les seules choses qui peuvent être observées. Si la liste est encapsulée dans une liste d'observation, les membres de la liste peuvent également être observés. Le modèle de réponse de l'observable est assez avancé. Vous pouvez non seulement recevoir des notifications lorsque la liste est modifiée, mais aussi voir comment la liste est modifiée.
Exemple:
List <string> autre liste = arrays.aslist ("foo", "bar", "bar"); observableList <string> list = fxCollections.observableLlist (autre liste); list.addListener ((listChangeListener.Change <? Étend String> Change) -> {System.out.println ("reçue."); (change.wasadded ()) {system.out.println ("items" + change.getAddedSublist () + "a été ajouté.");} if (Change.WasreMoved ()) {System.out.println (" list.set (1, "foo"); System.out.println ("nouvelle liste:" + list);La sortie en cours d'exécution du code ci-dessus est la suivante:
Ancienne liste: [foo, bar, bar] reçoit l'événement.items [foo] a été ajouté.
Comme vous pouvez le voir, l'opération de réglage ne déclenchera un événement qu'une seule fois.
4. StringConverter
Parfois, vous constaterez que vous n'avez pas besoin d'extraire les valeurs d'un composant lorsque vous souhaitez créer une liaison. Un exemple typique de ceci est que vous avez une StringProperty avec un chemin que vous obtenez à partir d'un champ de texte. Si vous souhaitez avoir une propriété observable avec cette valeur représentée sous forme de chemin, vous devez créer un convertisseur String pour cela.
Exemple:
TextField FileLocation = new TextField (); StringProperty location = FileLocation.TextProperty (); Property <Amm> path = new SimpleObjectProperty <> (); Bindings.bindbidirectional (emplacement, path, new StringConverter <Athath> () {@Override public String toString (path path) {return path.toString ();} @Override Public Path FromString (String String) {return paths.get (string);}});Les propriétés des objets ne sont pas des liaisons bidirectionnelles aux valeurs du champ de texte.
5. Expressions
En utilisant la classe de liaisons ci-dessus, vous pouvez créer n'importe quel type d'expression. Par exemple, vous avez deux champs de texte qui permettent aux utilisateurs de saisir des informations. Maintenant, je veux définir un domaine en lecture seule, qui contiendra toujours une chaîne. Si les longueurs des deux chaînes sont égales, les deux chaînes seront mélangées ensemble par intervalles caractéristiques pour l'affichage. Si les longueurs ne sont pas égales, un message d'aide s'affiche.
Exemple:
TextField First = new TextField (); TextField second = new TextField (); TextField Mix = new TextField (); mix.TextProperty (). bind (bindings.when (first.lengthProperty (). IsEqualto (Second.LengthProperty ())) .then (bindings.CreateStringBinding (() -> {int longueur = first.lengthProperty (). get (); string firstText = first.TextProperty (). Get ();); Result = new Char [Length * 2];Ce n'est qu'un peu des nombreuses fonctionnalités de Javafx. J'espère que vous pourrez trouver des moyens plus créatifs de tirer parti de ce système d'événements!