如何在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元素,但也可以将其用作某种数据管道. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |