JavaFX ListView 刷新

3

在JavaFX 2.1中,有没有一种方法可以强制刷新ListView而不重新加载列表并更改所选值?

可观察列表由字符串组成,因此更改它们的值是不可行的。


有很多关于表格视图类似的问题。例如:https://dev59.com/KGTWa4cB1Zd3GeqPFaj6 - Sergey Grinev
1
是的,问题在于我不想更改任何可见属性。应该有一种编程方式可以通过单个调用来更新列表。 - betaman
3个回答

3

尝试:

...
ObservableList<String> olist = ... 
ListView<String> listv = ...
...
listv.setItems(null); 
listv.setItems(olist);

谢谢你的回答。我已经尝试过了,它确实有效,但是在某些字段中会导致闪烁,当你每秒刷新一次时这很烦人。我找到了另一种更详细的方法,适合我的需求。如果有人需要,只需询问,我会发布它。 - betaman
@betaman,请发布您的解决方案 - 我也遇到了同样的问题:( 谢谢! - bennyl
1
@bennyl 在我上面发布的 Jira 链接中,有很多比我的解决方案更好的解决方案。选择一个并投票,这样他们就可以在未来的 JavaFX 版本中修复它。https://javafx-jira.kenai.com/browse/RT-22599 - betaman
@MustafaErdemKöşk 我刚刚发布了我的代码答案。希望它能有所帮助。 - betaman

2

将字符串值与像SimpleStringProperty这样的属性进行包装,并更改此属性的值是可行的。


谢谢Uluk。那是一个可能的解决方案。但我非常希望ListView和TableView中有某种“刷新”命令。 - betaman
2
我刚刚创建了它:http://javafx-jira.kenai.com/browse/RT-22599。 任何想要实现此功能的人都可以访问该地址并投票支持。 - betaman

0

我使用:

private static final ObservableList<String> lists = FXCollections.observableArrayList();
...


synchronized(lists) {
        List<String> lsts = new ArrayList<>();
        lsts.addAll(lists);
        lists.clear();
        lists.addAll(lsts);            
    }

什么是synchronized - posfan12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接