繁体   English   中英

在JavaFX中根据事件的另一阶段更新一个阶段的UI组件

[英]Updating UI Components of One Stage Based On Event in Another Stage in JavaFX

我有两个Stages ,例如Stage1和Stage2。 Stage1有一个ListView和一个Button Stage1上的OnPressing按钮上,我打开一个对话框,即Stage2。 Stage2具有TextField和一个Button 如果我在TextField中输入字符串并单击按钮,则关闭上一个Stage1。 现在,我要在单击stage2按钮后更新ListView。

当我按下按钮打开对话框时,我没有关闭Stage1。

我在stage2上使用showAndWait函数

window.showAndWait();

并使用关闭它

stage.close();

以上是阶段的一部分。 我还想根据stage2中的按钮刷新其他组件。

有人可以建议我这样做吗?

这取决于您使用的是FXML还是仅进行编码。

但是在以下两种方式中,任何一种方式都是相同的:

您需要将两个阶段都包含在变量中。 然后添加一个onAction事件侦听器,它将在其中触发您的阶段2为stage2.showAndWait()

至于文本字段和列表。 您需要使用简单的arrayList.add();添加到该列表arrayList.add(); 然后将新列表传递到您的listView FXController.ObservableArrayList(arrayList)然后更新或“刷新”该listView,由于没有方法可以“刷新”,而是通过设置listView.setVisible(false); ;,这是不确定的listView.setVisible(false); 并且listView.setVisible(true)做到了!!

如果您希望它是“自动的”,则必须在onAction事件中添加所有内容!

祝好运

如果您有代码,我会提供一个更好的示例,但我想我已经解决了所有问题。

我接受@James_D的建议并“刷新”了ListView 我打算将一个项目添加到ListView并根据Button事件对其进行更新。

如果项目成功添加到列表中,则在controller处理了按钮事件,并调用了refreshListView()。 基本上,我意识到,一旦关上stage2,控件便会返回给Stage1控制器。 所以我写了下面的代码:

    @FXML
    private void handleAddNewItem(ActionEvent event) throws IOException {
        boolean flag = mNewBox.display();
        if(flag==true){
            refreshListView();
        }
    }

    public void refreshListView() {
        List<String> list = new ArrayList<String>();
        list = singleton.getFiles();

        items = FXCollections.observableArrayList(list);
        itemsListView.setItems(items);
    }

感谢您的建议!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM