A interface Property tem cinco métodos:
1 2 3 4 5 |
void bind(ObservableValue<? extends T> observable); void unbind(); boolean isBound(); void bindBidirectional(Property<T> other); void unbindBidirectional(Property<T> other); |
O método bind() estabelece um unidirectional binding entre o Property e o ObservableValue. O método unbind() fornece o binding, e o método isBound() reporta se um unidirectional binding é um efeito.
Uma vez em vigor, o unidirectional binding estabelece uma dependência do primeiro para o último. O método set() ou setValue() na Property irá lançar um RuntimeException, e o método get() ou getValue() irá retornar o valor do ObservableValue.
O método bindBidirectional() estabelece um bidirectional binding entre dois objetos Property. O método unbindBidirectional() o libera. Uma vez em vigor, chama o set() ou setValue() ou qualquer Property fará com que os valores de ambos os objetos sejam atualizados.
Cuidado: cada Property pode ter mais de um binding unidirecional ativo por vez. Ele pode ter vários bidirectional bindings que você quiser. O método isBound() refere-se ao unidirectional bindings. Chamando uma segunda vez o bind() com um diferente ObservableValue irá unbind o anterior e substituir pelo o novo.
Para resumir o Property pode guardar um valor, pode avisar quando valores são modificados, e pode ser vinculado a outros para refletir os valores dos objetos vinculados.
PropertiesExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
package main.java.br.com.cursojavanow; import javafx.beans.InvalidationListener; import javafx.beans.property.IntegerProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.value.ChangeListener; public class PropertiesExample { private static IntegerProperty i1; public static void main(String[] args) { createProperty(); addAndRemoveInvalidationListener(); addAndRemoveChangeListener(); bindAndUnbindOnePropertyToAnother(); } private static void createProperty() { System.out.println(); i1 = new SimpleIntegerProperty(1024); System.out.println("i1 = " + i1); System.out.println("i1.get() = " + i1.get()); System.out.println("i1.getValue() = " + i1.getValue()); } private static void addAndRemoveInvalidationListener() { System.out.println(); final InvalidationListener invalidationListener = observable -> { System.out.println( "The observable has been " + "invalidated: " + observable + "."); }; i1.addListener(invalidationListener); System.out.println("Added invalidation listener."); System.out.println("Calling i1.set(2048)."); i1.set(2048); System.out.println("Calling i1.setValue(3072)."); i1.setValue(3072); i1.removeListener(invalidationListener); System.out.println("Removed invalidation listener."); System.out.println("Calling i1.set(4096)."); i1.set(4096); } private static void addAndRemoveChangeListener() { System.out.println(); final ChangeListener<Number> changeListener = (observableValue, oldValue, newValue) -> { System.out.println( "The observableValue has " + "changed: oldValue = " + oldValue + ", newValue = " + newValue); }; i1.addListener(changeListener); System.out.println("Added change listener."); System.out.println("Calling i1.set(5120)."); i1.set(5120); i1.removeListener(changeListener); System.out.println("Removed change listener."); System.out.println("Calling i1.set(6144)."); i1.set(6144); } private static void bindAndUnbindOnePropertyToAnother() { System.out.println(); IntegerProperty i2 = new SimpleIntegerProperty(0); System.out.println("i2.get() = " + i2.get()); System.out.println("Binding i2 to i1."); i2.bind(i1); System.out.println("i2.get() = " + i2.get()); System.out.println("Calling i1.set(7168)."); i1.set(7168); System.out.println("i2.get() = " + i2.get()); System.out.println("Unbinding i2 from i1."); i2.unbind(); System.out.println("i2.get() = " + i2.get()); System.out.println("Calling i1.set(8192)."); i1.set(8192); System.out.println("i2.get() = " + i2.get()); } } |
BidirectionalBindingExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package main.java.br.com.cursojavanow; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; public class BidirectionalBindingExample { public static void main(String[] args) { System.out.println("Constructing two StringProperty" + " objects."); StringProperty prop1 = new SimpleStringProperty(""); StringProperty prop2 = new SimpleStringProperty(""); System.out.println("Calling bindBidirectional."); prop2.bindBidirectional(prop1); System.out.println("prop1.isBound() = " + prop1.isBound()); System.out.println("prop2.isBound() = " + prop2.isBound()); System.out.println("Calling prop1.set(\"prop1" + " says: Hi!\")"); prop1.set("prop1 says: Hi!"); System.out.println("prop2.get() returned:"); System.out.println(prop2.get()); System.out.println("Calling prop2.set(prop2.get()" + " + \"\\nprop2 says: Bye!\")"); prop2.set(prop2.get() + "\nprop2 says: Bye!"); System.out.println("prop1.get() returned:"); System.out.println(prop1.get()); } } |
Fonte: The Definitive Guide to Modern Java Clients with JavaFX
Deixe um comentário