JavaFX: comment utiliser les événements de propriété

JavaFX propriétés fournissent une addListener méthode qui vous permet d'ajouter des gestionnaires d'événements qui sont appelés à chaque fois que la valeur d'une propriété changements. Vous pouvez créer deux types de gestionnaires d'événements de la propriété:

  • UN changement auditeur, qui est appelé à chaque fois que la valeur de la propriété a été recalculé. Le changement auditeur est passé trois arguments: la propriété dont la valeur a changé, la valeur précédente de la propriété, et la nouvelle valeur.

  • Un invalidation auditeur, qui est appelé à chaque fois que la valeur de la propriété devient inconnu. Cet événement est déclenché lorsque la valeur de la propriété doit être recalculé, mais n'a pas encore été recalculé. Un écouteur d'événement d'invalidation est passé juste un argument: l'objet de la propriété elle-même.

Changer et d'invalidation auditeurs sont définis par les interfaces fonctionnelles nommées ChangeListener et InvalidationListener. Parce que ces interfaces sont des interfaces fonctionnelles, vous pouvez utiliser des expressions lambda pour les mettre en œuvre. Voici comment vous utilisez une expression lambda pour enregistrer un changement auditeur sur le texte propriété d'un champ de texte nommé text1:

. text1.textProperty () addListener ((observables, OldValue, newvalue) -> // Code va ici) -

Voici un exemple qui enregistre un écouteur d'invalidation:




. text1.textProperty () addListener ((observables) -> // Code va ici) -

La seule façon pour le addListener sait si vous enregistrez un changement auditeur ou un écouteur d'invalidation est en regardant les arguments que vous spécifiez pour l'expression Lambda. Si vous fournissez des trois arguments, addListener enregistre un changement auditeur. Si vous fournissez simplement un argument, un écouteur d'invalidation est installé.

Cette liste de code montre une application JavaFX simple qui utilise le changement auditeurs de faire varier automatiquement la taille d'un rectangle de la taille de la fenêtre de la pile qui le contient.

Un changement auditeur est inscrit propriété largeur du volet de la pile de sorte que chaque fois que la largeur des variations de la fenêtre de la pile, la largeur du rectangle est automatiquement réglé sur la moitié de la largeur de nouveau le volet de la pile. De même, un changement écouteur est enregistré sur la propriété de la hauteur de changer la hauteur du rectangle.

javafx.application d'importation * -. javafx.stage d'importation * -. javafx.scene d'importation * -. javafx.scene.layout d'importation * -. javafx.scene.shape d'importation * -.. javafx.scene.paint d'importation * - classe publique AutoRectangle étend l'application {static void main (String [] args) {publiques lancement (args) -} @ Override début public void (étape primaryStage) {Rectangle r = new Rectangle(100,100)-@@a18r.setFill(Color.LIGHTGRAY)-r.setStroke(Color.BLACK)-r.setStrokeWidth(2)-StackPane p = new StackPane()-@@a23p.setMinWidth(200)-p.setPrefWidth(200)-p.setMaxWidth(200)-p.setMinHeight(200)-p.setPrefHeight(200)-p.setMaxHeight(200)-p.getChildren().add(r)-p.widthProperty().addListener(@@a33(observable, OldValue, newvalue) -> r.setWidth ((Double) newvalue / 2)) - p.heightProperty () addListener (@@A38 (observable, OldValue, newvalue) -.> r.setHeight ((Double) newvalue 2 /) ) scène -Scene = new Scène (p) -primaryStage.setScene (scène) -primaryStage.setTitle ("Auto Rectangle") - primaryStage.show () -}}

Cette figure montre cette application en action. Cette figure montre la fenêtre initiale affichée par l'application ainsi que la façon dont la fenêtre apparaît après que l'utilisateur a fait la fenêtre haute et plus large. Comme vous pouvez le voir, le rectangle a augmenté en taille proportionnellement.

image0.jpg

Les paragraphes suivants décrivent les faits saillants:

  • 18: Ces lignes de créer un rectangle 100x100 et définir la couleur du rectangle de remplissage, la couleur de la course, et la largeur de la course.

  • 23: Ces lignes de créer un volet de la pile et définir ses propriétés width et height.

  • 33: Ces lignes utilisent une expression lambda pour enregistrer un gestionnaire de changement avec le paramètre de largeur de la fenêtre de la pile. Lorsque des changements de largeur du volet de la pile, la largeur du rectangle est défini sur une moitié de la largeur du volet de la pile.

  • 38: Ces lignes utilisent une expression lambda pour enregistrer un gestionnaire de changement avec le paramètre de taille de la fenêtre de la pile. Lorsque la hauteur du volet de la pile ne change, la hauteur du rectangle est défini sur une moitié de la hauteur du volet de la pile.


» » » » JavaFX: comment utiliser les événements de propriété