嘿哟,
所以我目前正在开发一个 JavaFX 项目,另一个 Java 项目负责处理/提供该项目的数据。
虽然我已经完成了大部分工作,但我仍在尝试在从数据项目加载数据时加载 ProgressBar,但我在执行此操作时遇到了一些问题。
目前,我正在循环访问数据,为每个“条目”创建/添加标签到 GridPane。在其上方,我声明了一个 JavaFX ProgressBar 并将其添加到我的“根包装器” VBox
。
GridPane wrapper = new GridPane();
ProgressBar progress = new ProgressBar();
viewBox.getChildren().add(progress);
int currentRow = 1;
for(Map.Entry<String, List<Observation>> item : handler.get(from, to).entrySet()) {
if(item != null) {
for(Observation inner : item.getValue()) {
if(inner != null) {
// Add the data for the datalist
wrapper.add(new Label(item.getKey()), 0, currentRow);
wrapper.add(new Label(inner.getDate().toString()), 1, currentRow);
wrapper.add(new Label(String.valueOf(inner.getValue())), 2, currentRow);
currentRow++;
}
}
}
}
viewBox.getChildren().add(wrapper);
现在,对于我试图实现这一目标的事情,因为我意识到仅靠这段代码不会做太多事情:
1) 尝试将 GridPane 包装在 Task
中并从所述任务创建一个新线程 - 由于尝试在不在 JavaFX 应用程序线程中创建 JavaFX 元素而无法工作
2) 尝试包装所有 wrapper.add(new Label(...));
在Platform.runLater()
- 如wrapper
不是最终的,需要同时存在于范围内和范围外,这也不起作用。
3) 尝试将数据条目逐个添加到临时映射中,并通过让 ProgressBar 部分在其自己的任务/线程中运行来显示进度。只要我使用 Thread.join();
似乎就可以工作后来,但似乎极其无效。
一如既往,我们非常感谢任何和所有的帮助。如果我忘记提及一些需要能够告诉我发生了什么的事情,请告诉我!我尝试包含所有相关内容。
提前致谢!
最佳答案
创建进度条后,它会显示在 GUI 使用中
progress.setProgress(double value)
根据您的进度设置适当的值。
例如,您可以将进度如下所示:
progress.setProgress((currentRow - 1) / handler.get(from, to).entrySet().size())
该行可以作为 for 循环中的第一行。当整个作业完成后,将进度设置为 1 或删除进度条。
关于java - 动态加载 GridPane 时显示 ProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53300726/