JavaFX-滚动窗格中的大量数据冻结UI

JavaFX-滚动窗格中的大量数据冻结UI,java,javafx,Java,Javafx,我需要做什么? 我需要显示大量数据。 1个网格窗格,共有约25个标签。需要显示100-500个网格窗格 我是怎么做到的? 我用了一个滚动窗格 因此,VBox中有许多网格窗格,这些网格窗格放在滚动窗格中。 我在一个额外的线程中生成网格窗格,并在JavaFX线程中设置滚动窗格的内容 其中一些标签是经过修改的标签,因此可以复制或链接 发生了什么事? 显示数据后,UI会冻结几秒钟 问题1:我可以做一些修改来防止UI冻结吗? 问题2:是否有其他组件更适合显示此类数据 示例代码: package sampl

我需要做什么?

我需要显示大量数据。
1个网格窗格,共有约25个标签。需要显示100-500个网格窗格

我是怎么做到的?

我用了一个滚动窗格 因此,VBox中有许多网格窗格,这些网格窗格放在滚动窗格中。
我在一个额外的线程中生成网格窗格,并在JavaFX线程中设置滚动窗格的内容

其中一些标签是经过修改的标签,因此可以复制或链接

发生了什么事?

显示数据后,UI会冻结几秒钟

问题1:我可以做一些修改来防止UI冻结吗?
问题2:是否有其他组件更适合显示此类数据

示例代码:

package samples.longload;
导入java.util.ArrayList;
导入java.util.LinkedHashMap;
导入java.util.List;
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.beans.binding.Bindings;
导入javafx.concurrent.Service;
导入javafx.concurrent.Task;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Insets;
导入javafx.geometry.Pos;
导入javafx.scene.Cursor;
导入javafx.scene.Node;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.ProgressIndicator;
导入javafx.scene.control.ScrollPane;
导入javafx.scene.layout.ColumnConstraints;
导入javafx.scene.layout.GridPane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类Longload扩展了应用程序
{
专用最终按钮runButton=新按钮(“运行”);
专用最终标签=新标签();
最终滚动窗格sp=新滚动窗格();
最终VBox vb=新的VBox();
专用最终服务=新服务()
{
@凌驾
受保护的任务createTask()
{
返回新任务()
{
@凌驾
受保护的Void调用()引发异常
{
最终列表节点列表=新的ArrayList();
对于(int i=0;i<500;i++)
{
final GridPane grid=defineGrid();
添加节点列表(网格);
}
vb.getChildren().addAll(nodeList);
Platform.runLater(新的Runnable()
{
@凌驾
公开募捐
{
sp.setContent(vb);
}
});
返回null;
}
};
}
};
@凌驾
公共作废开始(最后阶段)
{
最终VBox布局=createLayout();
最终场景=新场景(布局,15001000);
舞台场景;
Bindui和Service(阶段);
stage.show();
}
专用void bindUIandService(最终阶段)
{
label.textProperty()
.bind(service.stateProperty().asString())
);
stage.getScene()
.getRoot()
.cursorProperty()
.绑定(
绑定
.when(service.runningProperty())
.然后(游标。等待)
。否则(Cursor.DEFAULT)
);
运行按钮
.disableProperty()
.绑定(
service.runningProperty()
);

runButton.setOnAction(新的EventHandler

?如果
列表视图
不合适,您可能需要编辑您的问题,以包括数据应如何显示的图像。我很难想象最终结果会是什么样子。编辑了主要帖子并添加了@CeilingGecko提到的图像,您应该考虑在中使用
列表视图
例如,您可以显示前50个项目,如果用户滚动到列表末尾,则可以将下50个项目添加到列表中。ListView为我完成了此操作。谢谢。