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

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

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

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

我在 stage2 使用 showAndWait 函数

window.showAndWait();

并使用

关闭它
stage.close();

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

任何人都可以建议我一个方法吗?

这取决于您是使用 FXML 还是只是编码。

但这两种方式中的任何一种方法都是相同的:

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

至于文本字段和列表。您需要使用简单的 arrayList.add(); 添加到该列表,然后将新列表传递给您的 listView FXController.ObservableArrayList(arrayList) 然后更新或 "refresh" 该 listView 最近有点不确定,因为没有方法"refresh" 但通过设置 listView.setVisible(false);listView.setVisible(true) 就成功了!!

如果您希望它成为 "automatic",您必须在 onAction 活动中添加所有内容!

祝你好运

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

我采纳了@James_D 的建议和 "refreshed" 我的 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);
    }

感谢您的建议!