JavaFX: cómo utilizar los eventos de propiedad
Propiedades JavaFX proporcionan una addListener método que le permite agregar controladores de eventos que se llaman cada vez que el valor de una propiedad cambia. Puede crear dos tipos de controladores de eventos de propiedad:
LA cambio oyente, que se llama cada vez que el valor de la propiedad se ha recalculado. El cambio oyente se pasa tres argumentos: el de propiedad cuyo valor ha cambiado, el valor anterior de la propiedad, y el nuevo valor.
Un oyente invalidación, que se llama cada vez que el valor de la propiedad se convierte desconocido. Este evento se genera cuando el valor de la propiedad tiene que ser recalculado, pero aún no se ha recalculado. Un detector de eventos invalidación se pasa un solo argumento: el propio objeto de propiedad.
Cambio y invalidación oyentes se definen por interfaces funcionales con nombre ChangeListener y InvalidationListener. Debido a que estas interfaces son interfaces funcionales, puede usar expresiones lambda para ponerlas en práctica. He aquí cómo usted utiliza una expresión lambda para registrar un oyente de cambio en el texto propiedad de un campo de texto llamado texto1:
. text1.textProperty () addListener ((observable, OldValue, nuevovalor) -> // código va aquí) -
He aquí un ejemplo que registra un oyente de nulidad:
. text1.textProperty () addListener ((observable) -> // código va aquí) -
La única forma en que el addListener sabe si va a registrar un oyente de cambio o un oyente invalidación es examinado los argumentos que especifique para la expresión Lambda. Si usted proporciona tres argumentos, addListener registra un oyente cambio. Si usted proporciona un solo argumento, se ha instalado un detector de invalidación.
Este listado de código muestra una sencilla aplicación JavaFX que utiliza cambio oyentes para variar el tamaño de un rectángulo automáticamente con el tamaño del panel de la pila que lo contiene.
Un oyente cambio se ha registrado en propiedad de ancho del panel de la pila de modo que siempre que la anchura de la pila cambios de panel, la anchura del rectángulo se ajusta automáticamente a la nueva media ancho del panel de pila. Del mismo modo, un oyente cambio se ha registrado en la propiedad height para cambiar la altura del rectángulo.
javafx.application import * -. javafx.stage import * -. javafx.scene import * -. javafx.scene.layout import * -. javafx.scene.shape importación. * -. javafx.scene.paint import * - public class AutoRectangle extiende Aplicación {main (String [] args) {static void públicos de lanzamiento (args) -} @ Override public void start (Etapa primaryStage) {rectángulo 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, nuevovalor) -> r.setWidth ((Doble) nuevovalor / 2)) - p.heightProperty () addListener (@@a38 (observable, OldValue, nuevovalor) -.> r.setHeight ((Doble) nuevovalor 2 /) ) escena -Escena = new escena (p) -primaryStage.setScene (escena) -primaryStage.setTitle ("Rectángulo Auto") - primaryStage.show () -}}
Esta figura muestra esta aplicación en acción. Esta figura muestra la ventana inicial mostrado por la aplicación, así como la forma en que aparezca la ventana después de que el usuario ha realizado la ventana más alta y ancha. Como se puede ver, el rectángulo ha aumentado de tamaño proporcionalmente.
A continuación se describen los aspectos más destacados:
18: Estas líneas crean un rectángulo de 100x100 y establecer el color del rectángulo relleno, trazo de color y el grosor del trazo.
23: Estas líneas crean un panel de la pila y establecer sus propiedades de anchura y altura.
33: Estas líneas usan una expresión Lambda registrar un manejador de cambio con el parámetro ancho del panel de pila. Cuando los cambios de ancho del panel de la pila, el ancho del rectángulo se encuentra a la mitad de la anchura del panel de pila.
38: Estas líneas usan una expresión Lambda registrar un manejador de cambio con el parámetro de la altura del panel de pila. Cuando la altura del panel de pila cambia, la altura del rectángulo se fija a uno un medio de la altura del panel de pila.