当前位置: 首页 > 知识库问答 >
问题:

在for循环中等待输入的最佳方式是什么?

江英卓
2023-03-14

在JavaFX 2中,我有一个通过读取Excel文件填充的TableView。看起来是这样的:

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

当用户按下“导入”按钮时,所有记录都必须添加到数据库中。但是,如果“产犊”字段的值为“true”,我将显示一个对话框窗口,用户必须在其中选择一个日期来指定产犊发生的时间。现在最大的问题是,我希望在打开对话框窗口后立即暂停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");
        }
    }
}

在我的show Dialog()方法中使用setOnCloseRequest()是一种选择吗?

共有2个答案

何烨华
2023-03-14

答案似乎比我想的要容易得多,只需使用show And等待()方法而不是show()。我怎么会错过呢...谢谢你的帮助。

show 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.showAndWait();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}
刁英朗
2023-03-14

如果您将奶牛列表复制到另一个数据结构(例如队列)中并在处理时删除每一头奶牛,则恢复处理它相对容易,因为只剩下需要处理的奶牛。

 类似资料:
  • 问题内容: 我正在使用bluebird,方法 getAll 和 update return promises。我如何说“等到两个承诺返回,然后更新currentProduct值”?我对JS很陌生… 问题答案: 如果可以使用/,这将很简单。 或者,如果您只能使用简单的承诺,则可以遍历所有产品,并将每个承诺置于最后一个循环中。这样,仅当前一个问题解决时,它才会前进到下一个问题(即使它将首先迭代整个循环

  • 问题内容: 据我所知,并已替换为更好的并发机制。那么,对于实现同步队列,您会选择哪种更好的替代方法呢? 它们究竟在什么意义上“更好”? 编辑 :这(“实现同步队列”)是一个采访问题。可接受的答案不能使用BlockingQueue或其他队列实现。但是,它可能使用其他同步构造,例如CountDownLatch。我没有允许和禁止的类的详尽列表- 请您注意。 问题答案: 已被Lock类方法和Conditi

  • 问题内容: 打破Javascript中的嵌套循环的最佳方法是什么? 问题答案: 就像Perl一样 如EMCA-262第12.12节所定义。[MDN文件] 与C不同,这些标签只能用于和,而Javascript没有。

  • 有一个 K8S 群集,我们的大多数部署只是更新映像的版本,但有时我们也希望更新部署配置的某些部分。我们的部署配置不包括映像的标记。 对于更新映像版本似乎是我最好的选择。至于一起更新部署配置和映像,我看到了几种方法: < li>kubectl部署...:< code>kubectl集合图像...[但是有两个部署] < li >使用实际图像标记编辑部署YAML[看起来不太优雅] < li>kubect

  • 我的问题得到了回答,我的问题得到了解决。我已经更新了这个线程与我的最终解决方案 我正在做这个学校作业(测验程序),我们最初只需要做一个纯粹的基于文本的控制台游戏,但我想挑战自己,试着用JavaFX创建它,我们刚刚开始学习。 这是一个基于回合的问答游戏,玩家将被呈现一个问题,要求玩家通过两个按钮(对或错按钮)回答对/错 游戏流程: 我正在运行一个for循环,只要我的ArrayList中还有问题,这个

  • 问题内容: 有时我需要等待一种方法完成,主要是在“加载程序”功能上。这是我这样做的方式: 我忍不住觉得这不是等待a 完成的最佳方法。做这个的最好方式是什么? 问题答案: 如果内没有 异步 代码, 则不是异步代码,例如以下代码: 完成后,您将看到警报。 否则(您内部有异步的东西),可以将循环包装在Promise中: 信用:@ rolando-benjamin-vaz-ferreira