双向绑定示例:
import javafx.application.Application;import javafx.beans.binding.Bindings;import javafx.beans.property.SimpleStringProperty;import javafx.beans.property.StringProperty;import javafx.beans.value.ChangeListener;import javafx.beans.value.Observablevalue;import javafx.event.ActionEvent;import javafx.event.EventHandler;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.TextField;import javafx.scene.layout.BorderPane;import javafx.stage.Stage;public class JavaFXApplication10 extends Application { private Model model = new Model(); @Override public void start(Stage primaryStage) { final TextField textField = new TextField(); Bindings.bindBidirectional(textField.textProperty(), model.firstProperty()); // Track the changes model.firstProperty().addListener(new ChangeListener<String>() { @Override public void changed(Observablevalue<? extends String> arg0, String arg1, String arg2) { System.out.println("model old val: " + arg1); System.out.println("model new val: " + arg2); System.out.println(); } }); textField.textProperty().addListener(new ChangeListener<String>() { @Override public void changed(Observablevalue<? extends String> arg0, String arg1, String arg2) { System.out.println("textField old val: " + arg1); System.out.println("textField new val: " + arg2); System.out.println(); } }); Button btn = new Button(); btn.setText("Change the model's text"); btn.setonAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { model.setFirst("changed from button action"); System.out.println("Done."); } }); BorderPane root = new BorderPane(); root.setTop(textField); root.setBottom(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); } public static void main(String[] args) { launch(args); } // Data Model public static class Model { StringProperty first = new SimpleStringProperty(); //getter public String getFirst() { return first.get(); } //setter public void setFirst(String first) { this.first.set(first); } //new "property" accessor public StringProperty firstProperty() { return first; } }}
双向绑定:
1种方式-输入到textField中的文本将反映到模型的第一个stringProperty。
相反的第二种方式-单击按钮,您会注意到,设置了模型的第一个stringProperty时,文本字段的文本值也会更改。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)