在 JTree 上过滤[关闭]

2024-03-21

Problem

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

为了让事情变得更容易一点,让我们假设JTree只支持渲染,不支持编辑。移动、添加、删除节点应该是可能的。

一个例子是上面的搜索字段JTree,然后输入JTree只会显示匹配的子树。

有一些限制:它只能在可以访问 JDK 和 SwingX 的项目中使用。我想避免包含其他第三方库。

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

方法

基于模型的过滤

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

基于视图的过滤

这似乎是可行的方法。过滤不应影响模型,而应仅影响视图。

  • 我看了一下RowFilter http://docs.oracle.com/javase/7/docs/api/javax/swing/RowFilter.html班级。尽管 javadoc 似乎建议您可以将它与JTree:

    当与 JTree 关联时,条目对应于一个节点。

    我找不到之间的任何链接RowFilter (or RowSorter http://docs.oracle.com/javase/7/docs/api/javax/swing/RowSorter.html)和JTree班级。标准的实施RowFilterSwing 教程似乎表明RowFilter只能直接使用JTable (see JTable#setRowSorter http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setRowSorter(javax.swing.RowSorter))。没有类似的方法可用JTree

  • 我还看了JXTree http://www.jarvana.com/jarvana/view/org/swinglabs/swingx/1.6.1/swingx-1.6.1-javadoc.jar!/org/jdesktop/swingx/JXTree.htmljavadoc。它有一个ComponentAdapter http://www.jarvana.com/jarvana/view/org/swinglabs/swingx/1.6.1/swingx-1.6.1-javadoc.jar!/org/jdesktop/swingx/decorator/ComponentAdapter.html可用和javadocComponentAdapter表示一个RowFilter可以与目标组件交互,但我不知道如何在目标组件之间建立链接RowFilterJTree
  • 我还没看过如何JTable处理过滤RowFilters,也许同样可以在 a 的修改版本上完成JTree.

简而言之:我不知道解决这个问题的最佳方法是什么

注意:这个问题可能是重复的这个问题 https://stackoverflow.com/questions/831813/hiding-filtering-nodes-in-a-jtree,但这个问题仍然没有答案,问题相当短,答案似乎不完整,所以我想发布一个新问题。如果不这样做(常见问题解答没有对此提供明确的答案)我将更新这个 3 年前的问题


看看这个实现:http://www.java2s.com/Code/Java/Swing-Components/InvisibleNodeTreeExample.htm http://www.java2s.com/Code/Java/Swing-Components/InvisibleNodeTreeExample.htm

它创建 DefaultMutableNode 的子类,添加“isVisible”属性,而不是实际从 TreeModel 中删除/添加节点。我认为非常好,它巧妙地解决了我的过滤问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JTree 上过滤[关闭] 的相关文章

  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • 设置 TreeSet 的大小

    有没有办法像数组一样对 Java 集合中的 TreeSet 进行大小限制 例如我们在数组中 anArray new int 10 数组具有固定长度 在创建数组时必须指定该长度 A TreeSet当您向其中添加元素时会自动增长 您无法设置其大

随机推荐

  • 在引用之前如何确保类是有效的?

    public class Person public string FullName get set public int PhoneNumber get set public int CarQTY get set 如果有人没有完全填充对象
  • Symfony2 - 将 /web 目录重定向到 root

    我的 Symfony 项目存在重复内容问题 以下网址提供相同的内容 www mywebsite com web page and www mywebsite com page 这是我的内容 htaccess file
  • 如何列出(或导出)数据库中所有触发器的代码?

    我正在将数据库中的当地时间更改为 UTC 时间 有很多触发器将信息复制到当前使用的历史表GETDATE 我想找到每个使用的触发器GETDATE 代替GETUTCDATE 在数据库中 有什么方法可以自动执行此操作 我已将它们列出select
  • 从 Postgis 获取投影限制

    我收到以纬度 经度坐标对形式对 API 进行的空间查询 我的空间数据是不覆盖整个地球的投影 因此某些查询超出范围 我想用有用的错误消息来回复错误的查询 我不想尝试在 GIS 规范或标准中找出每个投影的边界 并从中获取正确的纬度 经度对 而是
  • 将电报机器人与谷歌应用程序脚本连接

    我在电报机器人上设置了一个机器人 并通过以下应用程序脚本将其与谷歌电子表格连接this https www youtube com watch v mKSXd od4Lg教程 这是代码 var token FILL IN YOUR OWN
  • Node JS - 通过引用其他文件传递 Javascript 对象

    我通过如下要求定义了一个http服务器 var http require http function onRequest request response console log Request request console log Re
  • .NET Core 中的 CORS

    我正在尝试以这种方式在 NET Core 中启用 CORS public IConfigurationRoot Configuration get public void ConfigureServices IServiceCollecti
  • Android:来电自动接听,播放音频文件

    在Android中 当有来电时 我想接听它 然后 从我的应用程序中 在通话期间自动播放音频文件 对方应该听到它 这可能吗 你所说的情况在安卓上是不可能实现的 Android 无法访问通话中的音频流 不过我可以给你一些关于如何去做的想法 首先
  • 无需登录即可启动Raspberry Pi [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想问你是否有任何方法可以启动树莓派 使用Raspbian 而无需登录和密码并直接进入GUI 以 Windows 为例 拉斯布比喘息 以下
  • 在 /OPT:ICF 存在的情况下,Visual Studio 2013 是否可以正确优化?

    我希望下面的程序始终返回 0 但是 对于 Visual Studio 2013 更新 4 程序在发布版本中退出 1 我不确定这是否是一个错误 或者编译器的优化器是否正确并且依赖于某些边缘行为 如果关闭 CONST 宏 则释放 exe 将返回
  • 查找mysql中记录占用的空间

    我想找到数据库中记录占用的空间 我有2000条记录 我需要找到mySQL中的empid 4在数据库中占用了多少空间 请让我知道 mySQL 中的查询 显示表状态是您正在寻找的命令 http dev mysql com doc refman
  • 解决继承委托上不兼容的属性类型的语法

    我继承的一些代码有一个恼人的警告 它声明一个协议 然后使用它来指定委托 protocol MyTextFieldDelegate interface MyTextField UITextField property nonatomic as
  • 在非管理员帐户下运行自托管 OWIN Web API

    自托管 OWIN Web API 是否可以在非管理员帐户下运行 我已经尝试了几十个网址预订 但没有任何效果 服务无法启动 并显示 访问被拒绝 当帐户被添加到管理员角色时它会起作用 但我不希望这样 下面的代码在Win 7框架4 5 2上运行
  • python selenium 示例不起作用,说没有名为 Keys 的模块

    我在 Windows 机器上通过 pip 安装了 selenium 只需试用网站上的示例即可 http pypi python org pypi selenium from selenium import webdriver from se
  • 在 Firebase 中增加数据点的最简单方法?

    我在增加 Firebase 中的数据时遇到问题 Firebase clickedCounter 0 这是我的代码 IBAction func plus sender UIButton FIRDatabase database referen
  • Twisted:为什么将延迟回调传递给延迟线程会使线程突然阻塞?

    我尝试使用 txredis redis 的非阻塞扭曲 api 作为持久消息队列 但没有成功 我正在尝试使用我正在开发的 scrapy 项目进行设置 我发现虽然客户端没有阻塞 但它变得比本来应该的要慢得多 因为反应堆循环中本应是一个事件的事件
  • OpenCV:如何使用 HOGDescriptor::Detect 方法?

    I have succeeded in tracking moving objects in a video 然而我想决定一个物体是否是人 我已经尝试过HOGDescriptor在 OpenCV 中 HOGDescriptor 有两种检测人
  • django.db.utils.DataError:除以零

    我在以下代码行中收到错误 context stock margin context top stock annotate Avg purchase ExpressionWrapper F total puchase F quantity p
  • 第一个缩放事件删除中心变换

    我有一个像这样的 径向整齐树 https bl ocks org mbostock 4063550 https bl ocks org mbostock 4063550 我正在尝试添加缩放和平移 但我无法使缩放和平移正常工作 我的代码看起来
  • 在 JTree 上过滤[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Problem 对 a 应用过滤JTree以避免某些节点 叶子出现在渲染版本中JTree 理想情况下 我正在寻找一种允许动态过滤器的解决方案 但