Nếu bạn đang sử dụng JavaFX 2 sau đó nó cung cấp một giải pháp out-of-box cho cả kiến trúc JavaBeans thành phần và mẫu thiết kế Observer. Hơn nữa nó cho một sự linh hoạt tuyệt vời của việc kết hợp trạng thái của các biến bởi các ràng buộc thuộc tính. Đoạn mã dưới đây minh họa thuộc tính đã thay đổi các sự kiện và sự ràng buộc của các biến thuộc tính. Tất nhiên bạn có thể quấn các trình truy cập thuộc tính để ẩn các chi tiết bằng cách như getFlag()
và setFlag()
bên dưới và sử dụng chúng trong phần còn lại của ứng dụng.
public class Demo extends Application {
private BooleanProperty booleanProperty = new SimpleBooleanProperty(true);
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Add change listener
booleanProperty.addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
System.out.println("changed " + oldValue + "->" + newValue);
myFunc();
}
});
Button btn = new Button();
btn.setText("Toggle boolean flag");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
booleanProperty.set(!booleanProperty.get()); //toggle
System.out.println("toggled to " + booleanProperty.get());
}
});
// Bind to another property variable
btn.underlineProperty().bind(booleanProperty);
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
public boolean getFlag() {
return booleanProperty.get();
}
public void setFlag(boolean val) {
booleanProperty.set(val);
}
}
Nguồn
2012-04-02 12:52:11
Ông có thể cho chúng ta thấy một số mã? Tôi không nghĩ rằng những gì bạn đang yêu cầu là có thể nhưng hiệu quả tương tự có thể được thực hiện theo một cách khác. – chandsie