相关疑难解决方法(0)

过滤JTree

问题

对a应用过滤JTree以避免某些节点/叶子出现在渲染版本中JTree.理想情况下,我正在寻找一个允许动态过滤器的解决方案,但如果我能让静态过滤器工作,我会很高兴.

为了使它更容易一些,让我们假设JTree只支持渲染,而不是编辑.应该可以移动,添加,删除节点.

一个例子是a上面的搜索字段JTree,而在键入时,JTree只显示带有匹配的子树.

一些限制:它将用于可以访问JDK和SwingX的项目中.我想避免包含其他第三方库.

我已经想到了一些可能的解决方案,但这些都不是理想的

途径

基于模型的过滤

  • 装饰TreeModel以过滤掉一些值.快速而简单的版本很容易编写.过滤掉节点,并且在过滤器或委托TreeModel的每次更改时,装饰器都可以触发整个树发生变化的事件(treeStructureChanged根节点作为节点).将它与恢复选择状态和扩展状态的侦听器相结合JTree,你会得到一个或多或少有效的版本,但是来自它的事件TreeModel都搞砸了.这或多或少是这个问题中使用的方法
  • 装饰TreeModel但尝试点燃正确的事件.我(还)没有设法提出这个的工作版本.它似乎需要委托的副本,TreeModel以便能够在从委托模型中删除节点时使用正确的子索引触发事件.我认为有更多的时间我可以让它工作,但它只是感觉不对(过滤感觉像视图应该做的事情,而不是模型)
  • 装饰用于创建初始化的任何数据结构TreeModel.但是,这完全是不可重用的,并且可能和编写装饰器一样困难TreeModel

基于视图的过滤

这似乎是要走的路.过滤不应影响模型,只影响视图.

  • 我看了RowFilter上课.虽然javadoc似乎建议你可以结合使用它JTree:

    当与JTree相关联时,条目对应于节点.

    我找不到RowFilter(或RowSorter)和JTree班级之间的任何联系.RowFilterSwing教程的标准实现似乎表明RowFilter只能直接使用JTable(参见参考资料JTable#setRowSorter).没有类似的方法可供选择JTree

  • 我也看了一下JXTreejavadoc.它有一个ComponentAdapter可用的,并且javadoc ComponentAdapter表示RowFilter可以与目标组件进行交互,但我看不出如何建立RowFilter和之间的链接JTree
  • 我还没有看到如何JTable使用RowFilter …

java swing jtree swingx

34
推荐指数
3
解决办法
1万
查看次数

标签 统计

java ×1

jtree ×1

swing ×1

swingx ×1