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

JavaFX TableView分页-在更新观测列表数据时不更新TableView

年嘉禧
2023-03-14

我有一个带有分页的表视图。如下(简化):

public void createPagination() {
    Pagination pagination = new Pagination((allDataCount / rowsPerPage) + 1, 0);
    pagination.setPageFactory(this::createPage);
}

private Node createPage(int pageIndex) {
    int fromIndex = pageIndex * rowsPerPage;
    int toIndex = Math.min(fromIndex + rowsPerPage, allDataCount);
    table.setItems(FXCollections.observableArrayList(data.subList(fromIndex, toIndex)));

    return new BorderPane(table);
}

问题是,当我更新数据时(ObservableList)。更改在表视图中不可见。

在我看来,问题出在data.subList中。如果我使用table.setItems(data)设置项目,所有更改都会立即在TableView中可见。

有什么想法,我该怎么解决这个问题?


编辑

我正在更新如下数据:

//prepare new/changed Test object
Test test = new Test();
test.setId(1000);

int selectedIndex = table.getSelectionModel().getSelectedIndex() + pageIndex * rowsPerPage;
data.set(selectedIndex, test);

共有1个答案

满自明
2023-03-14

FXCollections.observableArrayList"创建一个新的可观察列表,其中添加了项目"-即它是一个可观察列表,使用您传入的数据初始化。因此,对原始列表的更改不会反映在它创建的新列表中。

您需要FXCollections。可观察列表(…) ,它“构建一个由原始列表支持的可观察列表”,即对基础列表的更改将反映在新列表中,反之亦然。

所以你想要

table.setItems(FXCollections.observableList(data.subList(fromIndex, toIndex)));

现在,该表显示的列表只是整个数据列表的一部分视图。因此更改为表。getItems()将对数据可见,反之亦然。然而,表视图只观察表。getItems(),即使数据是一个可观察的列表,对数据的更改通知也不会传递给表。getItems()。因此,您需要更改表所观察到的列表:

int selectedIndex = table.getSelectionModel().getSelectedIndex() ;
table.getItems().set(selectedIndex, test);
 类似资料:
  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 编辑:我已经用一个带有PropertyValueFactory的cellValueFactory创建了和TableView,但是当我更新表示TableView数据的ObservableList时,我的TableView将不会更新。我确信readNctsvorgaenge()创建的新列表已经更新,并且包含了附加项。这是用mvvmfx->moodel view viewmodel实现的 这是FXML文

  • UserViewModel: 用户存储库:

  • 我使用RecycerView使用游标显示sqlite数据库中的数据,当我从数据库中删除一项时,该项将被删除,但我的RecycerView视图不会刷新。 我必须回到我的主要活动,然后数据被刷新。我已经使用了notifyItemRemoved()和notifyDataSetChanged()

  • 我已经用php为我的网站实现了分页系统,唯一的问题是: 假设存在分页的url是,

  • 主要内容:Oracle UPDATE语句简介,Oracle UPDATE示例在本教程中将学习如何使用Oracle 语句来更改表中的已存在值。 Oracle UPDATE语句简介 要更改表中已存在的值,请使用以下Oracle 语句: Oracle UPDATE示例 下面让我们来创建一个包含示例数据的新表。 首先,下面的CREATE TABLE语句创建一个名为的新表: 其次,以下语句将示例数据添加到表中: Oracle 12c 插入数据语句 - 现在,查询上面创建的表中的数据