如何在JavaFX中广播事件
|
给定
JavaFX应用程序,其中多个演示者和视图以层次结构组织.如何将父节目主持人的事件广播到儿童演示者/视图?
我的架构如下所示:我有一个位于层次结构之上的MainPresenter public class MainPresenter {
@FXML private TreeView<String> navigation;
@FXML private AnchorPane contentView;
@Autowired private MainView mainView;
@Autowired private DetailView detailView;
@FXML
public void initialize() {
// register a handler for selection of treeview items
navigation.getSelectionModel().selectedItemProperty().addListener(
new ChangeListener<TreeItem<String>>() {
// ...
contentView.getChildren().clear();
contentView.getChildren().add(detailView);
contentView.fireEvent(new ResourceEvent(ResourceEvent.SELECTED,model));
// ...
}
);
}
}
还有一个演示者可以查看所选项目的详细信息: public class DetailPresenter {
@Autowired private DetailView view;
@PostConstruct
public void postInit() {
// is being executed
view.getView().addEventHandler(ResourceEvent.SELECTED,(event) -> {
// not being invoked
});
}
}
我想要实现的是,每当在TreeView中选择一个项目时,应该将此项目的DetailView添加到场景图(工作)中,并且应该通知DetailPresenter从后端服务加载资源. 我的问题是,如何实现这一目标? 解决方法
MyModel.java:
public class MyModel {
private StringProperty myString = new SimpleStringProperty();
public void setMyString(String myString) { this.myString.set(myString); }
public String getMyString() { return myString.get(); }
public StringProperty getMyStringProperty() { return myString; }
}
然后创建一个MyModel实例作为singleton bean(看起来你正在使用Spring).并将模型注入需要的位置: @Bean
public MyModel myModel() {
return new MyModel();
}
然后注入它并绑定到属性: public class MyPresenter {
@FXML TextField myTextField;
@Autowired MyModel myModel;
public void initialize() {
myTextField.textProperty().bind(myModel.getMyStringProperty());
}
}
如果现在有人更新了myString属性,那么UI myTextField也会更新. 您还可以在这些属性上注册一些自定义处理程序或使用twoWayBinding. 因此,您不必将其用作UI元素,但也可以将其用作某种数据管道. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
