问题标签 [jtree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java TreeNode:如何防止 getChildCount 进行昂贵的操作?
我正在编写一个 Java 树,其中树节点的子节点可能需要很长时间来计算(在这种情况下,它是一个文件系统,其中可能存在网络超时,从而阻止从连接的驱动器获取文件列表)。
我发现的问题是:
getChildCount()
在用户特别请求打开树的特定分支之前调用。我相信这样做是为了JTree
知道是否在节点旁边显示 + 图标。准确计数来自的孩子
getChildCount()
需要执行潜在的昂贵操作如果我伪造 的值
getChildCount()
,那么在请求枚举子节点之前,树只会为那么多子节点分配空间。(如果我返回“1”,我只会看到列出的 1 个孩子,尽管还有更多)
孩子的枚举可能既昂贵又耗时,我可以接受。但我不getChildCount()
同意需要知道孩子的确切数量。
有什么办法可以解决这个问题吗?
补充:另一个问题是,如果其中一个节点代表一个软盘驱动器(多么古老!),驱动器将在用户请求其文件之前被轮询;如果驱动器中没有磁盘,则会导致系统错误。
更新:不幸的是,实现TreeWillExpand
监听器不是解决方案。这可以让您否决扩展,但显示的节点数仍受TreeNode.getChildCount()
.
java - 为 JTree 实现工具提示的最佳方式?
由于 JTree 和 TreeModel 不直接提供开箱即用的工具提示,您认为,为 JTree 提供特定于项目的工具提示的最佳方式是什么?
编辑:(之后回答我自己的问题。)
@Zarkonnen:感谢 getTooltipText 的想法。
我发现了另一种(可能还是更好一点)覆盖 DefaultTreeCellRenderer 的方法,并想分享它:
memory-management - 大树:何时在 RIA 中发布数据
这个问题是关于 Java JTree 或 Window .Net 树 (Winforms) 或 Adobe Flex 树。
在客户端-服务器应用程序中(对于 Flex,它实际上是 Web),我有一个带有分层数据的树(在 Windows 资源管理器类型的界面中)。现在,当用户从服务器请求更多数据时,我会懒惰地加载树。这很好,最多可以运行大约 750K 个节点(在 .Net Winforms 和 Adobe Flex 上进行了经验测试),但之后它变得迟缓。但是数据库增长很快(主要是因为用户可以粘贴大量节点),拥有 2000 万个节点的数据库并非不可能。
当分支折叠时我应该从树中释放数据以便垃圾收集器可以释放内存吗?这很好,但是如果用户没有效率并且不折叠分支怎么办?我应该做一个内存管理模块来关闭一段时间未触及的分支吗?
这一切似乎都需要做很多工作,以免内存不足。
编辑:我应该发布节点崩溃的数据吗?如果有,什么时候?弱对象缓存的想法很好,但我是否应该继续填充 UI 直到它崩溃(也许这不是一个坏主意)?
java - 有没有办法在 JTree 中为多个根提供扩展器图标?
我有一个具有多个“根”的 JTree(当然,我实际上有一个不可见的真正根和多个孩子)。
双击时节点展开和折叠,但没有可视指示表明您可以执行此操作,因为没有展开器图标。
由于默认情况下树是折叠的,因此情况变得更糟,但是扩展“根”并没有真正帮助,因为每个树都有很多孩子,而且看起来很混乱。
有没有办法显示扩展器图标而不使真正的(并且完全没有价值的)根可见?
欢迎任何其他使显示更清晰的建议。
java - JTree 给出 ArrayIndexOutOfBoundsException?
我尝试将节点动态添加到 Java SwingJTree
中,并且用户应该能够在不断添加节点的同时浏览和折叠层次结构。当我Thread.sleep(10)
在循环中添加 a 时,它工作正常;但这是一个肮脏的黑客......
这是触发此问题的精简代码。每当我运行它并双击根节点以展开/折叠它(添加节点时),我都会得到一个ArrayIndexOutOfBoundsException
. 当我添加一个Thread.sleep(10)
这不会发生。我想这是一个线程问题,但我不知道如何同步?任何提示将不胜感激!
我想将其用于打字搜索应用程序,因此(几乎)提供即时结果对我来说至关重要。
编辑:感谢您的快速回答!SwingUtilities.invokeLater()
解决问题。
我现在这样做:
- 在其中添加 100 个项目
SwingUtilities.invokeLater();
在 100 个项目之后,我运行它以便更新 GUI:
/li>
这样我就有了一个响应速度非常快的 GUI,而且效果很好。谢谢!
java - Java JTree 仅扩展一级节点
使用 JTree,假设根节点为 0 级,并且根节点下方最多可能有 5 级,我如何轻松扩展所有 1 级节点,以便所有 1 级和 2 级分支和叶子都可见,但 3 级及以下不是吗?
java - Java JTree的右键单击上下文菜单?
我正在尝试在 Java JTree 中实现弹出菜单。我将 DefaultTreeCellRenderer (以更改节点外观)和 DefaultTreeCellEditor (以创建组件以将事件侦听器附加到,因为显然 DefaultTreeCellRenderer.getTreeCellRendererComponent() 返回的组件不能做到这一点?)。我真的不想“编辑”节点,只是能够在节点被右键单击时弹出一个菜单,但这是我现在能想到的唯一方法......
下面是我到目前为止的代码——我只是想弄清楚如何捕获 MouseEvents。它有点工作,但很糟糕。有什么更好的方法来完成我在这里尝试做的事情?
java - 无法突出显示 JTree 中的文件
我创建了一个 JTree,我想在其中突出显示一个文件,如果包含该文件的目录不可见,我需要展开它。
例如:我创建了一个根节点为 D:/Company/abb/src 的 JTree。我要强调的文件是 - D:/Company/abb/src/bin/help.txt
请给我一些逻辑来突出显示文件 help.txt。
提前致谢
java - 我可以停止 JTree 缓存节点(在文件系统树中)吗?
我有一个用于文件系统中目录的 JTree 实现。我遇到的问题是,当一个目录被删除或重命名时,树仍然显示它的父目录。扩展节点后,父树似乎不会因任何更改而更新。
我写的模型没有缓存(我已经注释掉了它确实有什么有限的缓存)——就像 JTree 本身已经缓存了节点一样。
代码(模型是嵌套子类):
java - 如何将 JTree“ctrl”选择模式设置为始终启用
我有一个实现多选逻辑的 JTree。
当我使用鼠标 + Ctrl 键进行所有选择时,这非常有用。如果用户在未按下 Ctrl 键的情况下进行选择,则会破坏我的逻辑。
我真的不明白它为什么会中断,但我认为一个可能的解决方案是始终指示 TreeSelectionModel 已按下 Ctrl 键进行选择。
你有什么建议?