Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX TableView分页-在更新ObservableList数据时不更新TableView_Javafx - Fatal编程技术网

JavaFX TableView分页-在更新ObservableList数据时不更新TableView

JavaFX TableView分页-在更新ObservableList数据时不更新TableView,javafx,Javafx,我有一个带有分页的表视图。像这样(简化): 问题是,当我更新数据时(可观察列表)。更改在表视图中不可见 在我看来,问题在于data.subList。如果我使用table.setItems(data)设置项,所有更改都会立即显示在TableView中 有什么想法,我怎么解决这个问题 编辑 我正在像这样更新数据: //prepare new/changed Test object Test test = new Test(); test.setId(1000); int selectedInde

我有一个带有分页的
表视图
。像这样(简化):

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

在我看来,问题在于
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);
“创建一个新的可观察列表,并向其添加项目”-即,它是一个可观察列表,由您传入的数据初始化。因此,对原始列表的更改不会反映在它创建的新列表中

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

所以你想要

table.setItems(FXCollections.observableList(data.subList(fromIndex, toIndex)));
现在,该表显示的列表只是整个
数据
列表的一部分视图。因此,对
表.getItems()
的更改将对
数据可见,反之亦然。但是,表视图仅观察
table.getItems()
,即使
data
是一个可观察的列表,对
数据的更改通知也不会传递到
table.getItems()
。因此,您需要更改表正在观察的列表:

int selectedIndex = table.getSelectionModel().getSelectedIndex() ;
table.getItems().set(selectedIndex, test);
“创建一个新的可观察列表,并向其添加项目”-即,它是一个可观察列表,由您传入的数据初始化。因此,对原始列表的更改不会反映在它创建的新列表中

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

所以你想要

table.setItems(FXCollections.observableList(data.subList(fromIndex, toIndex)));
现在,该表显示的列表只是整个
数据
列表的一部分视图。因此,对
表.getItems()
的更改将对
数据可见,反之亦然。但是,表视图仅观察
table.getItems()
,即使
data
是一个可观察的列表,对
数据的更改通知也不会传递到
table.getItems()
。因此,您需要更改表正在观察的列表:

int selectedIndex = table.getSelectionModel().getSelectedIndex() ;
table.getItems().set(selectedIndex, test);

Tnx的答案,但这仍然不能解决问题。你能更新问题,以显示你是如何更新数据的吗?很抱歉,答复太晚。非常感谢你!这解决了我的问题。Tnx的答案,但这仍然不能解决问题。你能更新问题,以显示你是如何更新数据的吗?抱歉,迟了答复。非常感谢你!这解决了我的问题。