首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaFX 2.1 TableView刷新项目

JavaFX 2.1 TableView刷新项目
EN

Stack Overflow用户
提问于 2012-06-17 00:21:46
回答 26查看 151.6K关注 0票数 65

我有一个共同的问题,就像它看起来的那样。重置项目后,我的表视图不会刷新它们。我已经检查了数据,这是新的。

我尝试了互联网上的多种解决方案,但都没有成功。

无法重置所有列,因为它添加了一个空的额外列(不知道为什么),并且调整大小只是中断。

我的表不是editable。新数据已更改。

如果我更改了项目的排序,则会刷新数据,并且行也会更改(:|)。

我就是毫无头绪。

目前,刷新代码非常简单。

代码语言:javascript
复制
ObservableList<User> data = FXCollections.observableArrayList(User.getResellers());
reseller_table.setItems(data);

同样,新数据是正确的。当我对tableView进行选择时,它会返回新的正确项。

EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2012-10-05 06:56:47

我在刷新方面也遇到了类似的问题。我的解决方案是将ObservableList上的操作限制为那些可以在bind()上正常工作的操作。

假设ObservableList obsListTableView的底层列表。

然后

obsList.clear() (继承自java.util.List<>)将无法正确更新TableView,但是。

还调用setItem(obsList) to not work来触发refresh...but...

obsList.removeAll(obsList) (被ObservableList覆盖)中工作得很好,因为它正确地触发了changeEvent。

然后用全新的内容重新填充列表,如下所示:

  • obsList.removeAll(obsList);
  • obsList.add(...); //e.g. in a loop...

  • obsList.removeAll(obsList);
  • FXCollections.copy(obsList, someSourceList)
票数 44
EN

Stack Overflow用户

发布于 2012-09-27 11:45:16

解决方法:

代码语言:javascript
复制
 tableView.getColumns().get(0).setVisible(false);
 tableView.getColumns().get(0).setVisible(true);
票数 63
EN

Stack Overflow用户

发布于 2016-09-24 06:37:13

由于您可以使用JavaFX 8u60 (假设tableViewTableView类的一个实例):

代码语言:javascript
复制
tableView.refresh();

从文档中:

调用refresh()会强制TableView控件重新创建并重新填充填充控件的可视边界所需的单元格。换句话说,这会强制TableView更新它向用户显示的内容。这在基础数据源以TableView本身不能观察到的方式进行更改的情况下非常有用。

票数 60
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11065140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档