簡體   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