gpt4 book ai didi

JavaFX TableView 性能问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:37 24 4
gpt4 key购买 nike

我正在使用 javafx TableView 控件来显示我的表数据。现在数据非常庞大,当我在控件中显示完整数据时它崩溃了。有什么办法可以做到这一点,或者我必须缓存数据以便我可以分块显示它。我应该改用 JTable 吗?

最佳答案

我使用 CellFactory 类在 tableview 上进行了延迟加载...我将尝试解释,任何英语水平比我好的人都可以自由编辑并使其更易于理解!

首先,我在 Bean 中使用强制属性来检查该 Bean 是否已经加载。这样我就不需要专门为此创建属性。

其次,我将我的 Bean 集合加载到 TableView 中,只是加载了“id”属性,这使得我的表格显示为空白。

最后,我创建了一个 CellFactory,如下所示,以检查对象是否已加载,如果没有则立即执行。

namecolumn.setCellFactory(new Callback<TableColumn<PersonBean, String>, TableCell<PersonBean, String>>() {
@Override
public TableCell<PersonBean, String> call(TableColumn<PersonBean, String> param) {
TableCell<PersonBean, String> newtablecell = new TableCell<PersonBean, String>() {
@Override
protected void updateItem(String item, boolean empty) {
// Since I got some strange errors when method getIndex() return greatter value than my collection size, I need to validate before getting the object
if (getIndex() < getItems().size()) {
//Retrieve the collection object
PersonBean personbean = getItems().get(getIndex());
// Name is mandatory, so if it is null my bean was not loaded yet
if (personbean.getName() == null) {
// Call other centralized method to make load, details explained later
loadPersonBean(personbean);
}
// Now I put the value on TableCell. Remember "item" still empty so we need to use Bean
setText(personbean.getName());
setAlignment(Pos.CENTER);
}
}
};
return newtablecell;
}
});

在 loadPersonBean 方法中,我传递包含在 TableView 集合中的对象并从数据库加载它。比我将所有需要的数据复制到从表中接收到的 bean。我没有尝试交换 TableView 中的对象,但我相信它可能会导致并发异常。

其他观察:在我的所有测试中,TableView 始终遵循列顺序来调用我的 CellFactory,但我没有测试如果用户交换列顺序它是否仍然遵循顺序。所以我更喜欢将带有“LazyLoadCheck”代码部分的 CellFactory 添加到所有列。

希望我的 self 表达足够清楚以提供帮助!如果还有任何问题,请发表评论,我会尽力做出更好的解释。

关于JavaFX TableView 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12068907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com