java SortController:如何使用动态过滤器
SwingX项目中的JXTable
有一个方法可以直接在JXTable
上设置RowFilter
(请参见JXTable#setRowFilter
)
当过滤器实现是动态的时,我不清楚您需要做什么
比较:在JDK中,他们在JDK1中引入了^{RowSorterListener
。如果您有一个动态的RowSorter
(也可以用于过滤),那么当过滤器更改时,您可以向这些侦听器触发事件(尽管这要求过滤器可以访问RowSorter
,因为JDK中没有DynamicRowFilter
或RowFilterEvent
)
我所期望的是,我可以在JXTable
上设置一个“可观察的”RowFilter
,而我什么也不做。但是,目前的API似乎不可能做到这一点,那么下一个最好的方法是什么呢
- 每次更改过滤器时,请再次设置过滤器。这是否会产生效果,因为它与之前在
JXTable
上设置的实例完全相同李> - 滥用表事件,仅触发表模型已更改的事件,这将重新触发排序/筛选
- 不要使用
setRowFilter
方法,创建自己的TableRowSorter
并使用JDKAPI李>
# 1 楼答案
重复我的评论:行过滤器必须是不可变的。在core中引入排序/过滤时,这是一个简洁的设计决策。因此,实现“动态”过滤的方法是
编辑
应该是:我不同意,——同时,我也不像以前那样确定;——
这种方法的优点是RowFilter实现起来非常简单,并且具有高度的可重用性——只是一个简单的谓词,其他什么都没有。这就允许对过滤器进行简单的逻辑复合(和/或)。过滤器无需通知,分拣机(或复合过滤器)无需监听和更新自身。然后,考虑到过滤器更改的“动态”通常来自用户交互,而且无论如何,有些东西必须倾听这些用户触发,创建新的行过滤器与更新现有的行过滤器并不是什么大问题