簡體   English   中英

在for循環中等待輸入的最佳方法?

[英]Best way to wait for input in a for loop?

在JavaFX 2中,我通過讀取Excel文件填充了TableView蜜蜂。 看起來像這樣:

identification    cellcount    calved
o0001             12345        false
o0002             65432        true
o0003             55555        false
...

當用戶按下“導入”按鈕時,所有記錄都必須添加到數據庫中。 但是,如果'calved'字段的值為'true',我將顯示一個Dialog窗口,用戶必須在其中選擇日期以指定發生產犢的時間。 現在最大的問題是,我希望在打開對話框窗口后立即暫停for循環蜂鳴聲。 使用我當前的代碼,所有“對話”窗口彼此堆疊。

這是加載FXML的Dialog方法:

public void showDialog(String sURL){
    final Stage myDialog = new Stage();
    myDialog.initStyle(StageStyle.UTILITY);
    myDialog.initModality(Modality.APPLICATION_MODAL);

    URL url = getClass().getResource(sURL);

    FXMLLoader fxmlloader = new FXMLLoader();
    fxmlloader.setLocation(url);
    fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
    try {
        Node n = (Node) fxmlloader.load(url.openStream());

        Scene myDialogScene = new Scene(VBoxBuilder.create().children(n).alignment(Pos.CENTER).padding(new Insets(0)).build());

        myDialog.setScene(myDialogScene);
        myDialog.show();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

這是我處理表行的for循環:

@FXML
private void handle_ImportCowDataButton(ActionEvent event) {
    Cows selectedCow;

    for(ImportRow row: tblImport.getItems()){
        selectedCow = null;

        for (Cows cow : olCows) {
            if (cow.getOfficial().equals(row.getCownumber())) {
                selectedCow = cow;
            }
        }

        if (selectedCow != null) {
            if (row.getCalving()) {
                //if cow exists and cow has calved, show dialog window loading addcalving.fxml
                //then the for loop should wait until that dialog window is closed before continuing
                Context.getInstance().setPassthroughObject(selectedCow);
                Context.getInstance().showDialog("/GUI/calving/AddCalving.fxml");
            }
        } else {
            //if cow does not exist, show dialog window loading addcow.fxml
            //then the for loop should wait until that dialog window is closed before continuing
            Context.getInstance().setPassthroughObject(selectedFarmer);
            Context.getInstance().showDialog("/GUI/cow/AddCow.fxml");
        }
    }
}

是否可以在我的showDialog()方法中使用setOnCloseRequest()

如果將母牛名單復制到另一個數據結構(例如隊列)中並在處理過程中將其刪除,則恢復過程相對容易,因為只剩下需要處理的母牛。

似乎答案比我想的要容易得多,只需使用showAndWait()方法而不是show() 我到底怎么會錯過這個……謝謝您的幫助。

showDialog()方法的最終代碼:

public void showDialog(String sURL){
    final Stage myDialog = new Stage();
    myDialog.initStyle(StageStyle.UTILITY);
    myDialog.initModality(Modality.APPLICATION_MODAL);

    URL url = getClass().getResource(sURL);

    FXMLLoader fxmlloader = new FXMLLoader();
    fxmlloader.setLocation(url);
    fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
    try {
        Node n = (Node) fxmlloader.load(url.openStream());

        Scene myDialogScene = new Scene(VBoxBuilder.create().children(n).alignment(Pos.CENTER).padding(new Insets(0)).build());

        myDialog.setScene(myDialogScene);
        myDialog.showAndWait();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM