Javafx es la nueva biblioteca estándar utilizada en Java para construir aplicaciones gráficas, pero muchos programadores aún se apegan a usar Swing o incluso AWT. ¡Aquí hay algunas sugerencias sobre cómo crear aplicaciones rápidas y receptivas con nuevas características increíbles en el conjunto de herramientas Javafx!
1. Valor de atributo
Si tiene una comprensión completa de los componentes Javafx, Mobile ha encontrado la propiedad. Se pueden observar casi todos los valor en la biblioteca FX, el ancho de la partición, el tamaño de la imagen, el texto en la etiqueta, los elementos infantiles en una lista y el estado de la casilla de verificación. Los atributos se dividen en alternativas: atributos de escritura y atributos legibles. Los valores de escritura se pueden modificar, ya sea utilizando el método Setter o directamente. Javafx maneja el proceso de manejo de eventos y garantiza que se notifique cada componente que depende de esta propiedad. Las propiedades legibles tienen métodos que le permiten recibir notificaciones cuando sus valores se modifican.
Ejemplo:
// Nombre de StringProperty legible y redactable = new SimpleStringProperty ("Emil"); // solo lectura observableBooleanValue nameSEmpty = name.isEmpty ();2. Valor de enlace
Cuando tiene un valor de escritura y legible, puede comenzar a definir reglas sobre cómo están asociados estos valores. Una propiedad de escritura puede estar vinculada a una propiedad legible, por lo que su valor siempre coincidirá con la legible. Las enlaces no ocurren de inmediato, pero se realizarán antes de que se observe el valor (y mira lo que hice allí). La encuadernación puede ser unidireccional o bidireccional. Por supuesto, si son bidireccionales, ambas propiedades deben ser escritas.
Ejemplo:
TextField fielda = new TextField (); TextField FieldB = new TextField (); fielda.prefwidthProperty (). Bind (FieldB.WidthProperty ());
3. Lista observable
Los atributos no son las únicas cosas que se pueden observar. Si la lista está encapsulada en una lista observable, también se pueden observar los miembros de la lista. El modelo de respuesta de ObservableList es bastante avanzado. No solo puede recibir notificaciones cuando se modifica la lista, sino que también vea cómo se modifica la lista.
Ejemplo:
List <String> OtherList = Arrays.aslist ("foo", "bar", "bar"); observableList <string> list = fxCollections.observableList (otherList); list.addListener ((listChangeListener.change <? Extends> string> Change) -> {System.Println ("Recibido Evento"); While (Change.Ext () (Change.wasadded ()) {System.out.println ("items" + Change.getAdDedSublist () + "se agregó."); list.set (1, "foo"); system.out.println ("nueva lista:" + lista);La salida en ejecución del código anterior es el siguiente:
Lista anterior: [Foo, bar, bar] recibió evento.
Como puede ver, la operación de configuración solo activará un evento una vez.
4. StringConverter
A veces encontrará que no necesita extraer los valores de un componente cuando desea crear un enlace. Un ejemplo típico de esto es que tiene una stringproperty con una ruta que obtiene de un campo de texto. Si desea tener una propiedad observable con este valor representado como ruta, debe crear un StringConverter para ella.
Ejemplo:
TextField fileLocation = new TextField (); StringProperty Ubicación = Filelocation.TextProperty (); Propiedad <Path> Path = New SimpleObjectProperty <> (); Bindings.BindBidIrectional (ubicación, ruta, nuevo StringConverter <Path> () {@Override public String ToString (ruta de ruta) {return Path.ToString ();} @Override Public Path fromString (String String) {return Paths.get (String);}});Las propiedades del objeto no son enlaces bidireccionales a los valores del campo de texto.
5. Expresiones
Usando la clase de enlace anterior, puede crear cualquier tipo de expresión. Por ejemplo, tiene dos campos de texto que permiten a los usuarios ingresar información. Ahora quiero definir un dominio de solo lectura, que siempre contendrá una cadena. Si las longitudes de las dos cadenas son iguales, las dos cadenas se mezclarán entre los intervalos de carácter por personaje para la visualización. Si las longitudes no son iguales, se muestra un mensaje de ayuda.
Ejemplo:
TextField First = new TextField (); TextField Second = New TextField (); TextField Mix = New TextField (); mix.TextProperty (). bind (bindings.When (first.lengthProperty (). IEECHALTO (Second.lengthProperty ()) .Then (Bindings.CreatEdringBinding (() -> {int long = First.lengthProperty (). Second.TextProperty (). Get (); )). De lo contrario ("Por favor ingrese dos cadenas de exactamente la misma longitud"));Esto es solo un poco de las muchas características de Javafx. ¡Ojalá pueda encontrar formas más creativas de aprovechar este sistema de eventos!