基于JavaFX中另一个阶段的事件更新一个阶段的UI组件

时间:2015-07-02 12:26:12

标签: java javafx javafx-8

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

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

我在stage2上使用showAndWait函数

window.showAndWait();

并使用

关闭它
stage.close();

以上是舞台的一部分。我想根据第二阶段的按钮按下刷新其他组件。

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

2 个答案:

答案 0 :(得分:0)

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

但是在这两种方式中的任何一种方法都是一样的:

你需要在变量中拥有两个阶段。然后添加一个onAction事件监听器,它将触发您的第2阶段为stage2.showAndWait()

textfield和List。您需要使用简单的arrayList.add();添加到该列表,然后将新列表传递给listView FXController.ObservableArrayList(arrayList),然后更新或"刷新" listView它最近有点不确定,因为没有方法可以刷新"但通过设置listView.setVisible(false);listView.setVisible(true)已经完成了诀窍!!

如果你希望它是"自动"您必须在onAction事件中添加所有内容!

祝你好运

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

答案 1 :(得分:0)

我接受了@ James_D的建议,并且#34;刷新"我的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);
    }

感谢您的建议!