问题标签 [jxtreetable]

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.

0 投票
1 回答
444 浏览

java - JXTreeTable 没有显示我的数据

这是我的代码有什么问题

我的输出屏幕截图:

截屏

0 投票
0 回答
258 浏览

java - Java Swing:除了 SwingX 的 JXTreeTable 之外的树表小部件?

我寻找一个纯 Swing JXTreeTable 等价物。

为什么我不想使用 SwingX 的 JXTreeTable:

当我SwingX's JXTreeTable在 Linux 中使用 Swing 的GTK+LookAndFeel 时,它崩溃了!

它崩溃并显示此消息:("GThread-ERROR **: GThread system may only be initialized once. aborting..."它甚至不是“可捕获”异常,只是 JXTreeTable 实例化时立即崩溃)

由于我的 GUI 可以很好地与其他 LookAndFeel 配合使用,并且与添加 JXTreeTable 之前一样,我的 GUI 与GTK+LookAndFeel 配合得很好,我得出的结论是 SwingX 的 JXTreeTable 本身使用 GTK+/GLib 并因此导致崩溃。

那么任何人都可以帮助我吗?有没有人有 JXTreeTable 等效小部件的纯 Swing实现?

0 投票
1 回答
181 浏览

java - 如何知道 SwingX TreeTableModel 中的节点是否展开?

是否可以从 SwingX 的 TreeTableModel/AbstractTreeTableModel(特别是getValueAt(Object node, int index)方法)中检测节点是展开还是折叠?我需要为父节点显示不同的值,具体取决于它是展开还是折叠。(我意识到这违反了模型和视图分离的原则,对不起!)

isExpanded()我知道您可以使用标准和方法从 JXTreeTable 对象中检查这一点isCollapsed(),但我需要从模型中了解这一点。

具体来说,我有多个版本的对象,我想使用 JXTreeTable 来支持扩展/折叠版本。如果对象被折叠,我希望父节点显示所有版本的值的摘要。如果它被扩展,我希望父级仅显示当前版本的值(最重要的一个),并且不再需要或不需要摘要。

一些伪代码可以让您了解我的意思:

编辑

谢谢camickr,你当然是对的,我的问题是无效的!(我现在觉得有点傻。)

您是否建议使用自定义 TreeCellRenderer,以便它根据节点的展开状态选择要显示的值?也就是说,让模型提供一个实现类似这样的对象:

然后让 TreeCellRenderer 使用此方法(假设单元格值实现接口)根据方法中的expanded标志显示适当的值getTreeCellRendererComponent()

0 投票
0 回答
785 浏览

java - 如何在 JXTreeTable 中实现过滤器/搜索字段?什么是好的做法?

我有一个类 TreeNode,它有一些属性和一个 ArrayList 的孩子。

对于这个类,我有自己的 TreeModel,它扩展了 AbstractTreeTableModel。创建的树正确显示。

现在我想添加一个搜索字段,它在一个属性中进行搜索,并在它与一个节点匹配时显示所有父母和所有孩子。所以我必须上下遍历树。

我尝试使用 SerachFactory 但它只搜索可见节点。

一个例子会对我有很大帮助或最佳实践。我是否需要可以应用过滤器的第二个模型(扩展 AbstractTreeTableModel)?我怎样才能做到这一点?或者是通过渲染器的方法?

0 投票
1 回答
411 浏览

java - 过滤后的 JXTreeTable expandPath

我有可以过滤的 JXTreeTable。当我过滤关键字时,会设置一个新模型。它对我来说没问题。

现在我想展开所有过滤后的结果。为此,我保存找到匹配节点的位置。(它不可能是一片叶子。)

对于那个位置,我用这个方法创建了一个 TreePaths 列表:

现在我遍历这个列表并调用 expandPath(在设置新模型之后)其中 getTreePaths() 是我使用之前的方法创建的 TreePaths 列表。

但它没有任何效果,只有根被展开,所有的孩子都被折叠起来。在 TreePath 中,最后一个元素不是叶子。在这个循环中的 System.out 中,我得到了所有:

-1 真 真 真

System.out.println(tree.getRowForPath(elem)); System.out.println(f.isPathValid(elem,tree.getTreeTableModel())); System.out.println(tree.isVisible(elem)); System.out.println(tree.isExpanded(elem));

getRowForPath 的 -1 可能是问题所在?

是路径有效():

0 投票
1 回答
515 浏览

java - JXTreeTable、行条带化和适当的重绘

我正在使用默认情况下对表格进行行条带化的外观。当我输入 aJXTreeTable时,我注意到由于某种原因它没有自动获得行条带化。

所以我使用荧光笔提出了一个解决方法,但看起来我遇到了重绘故障:

显示绘画故障的屏幕截图

似乎JXTreeTable是专门重新绘制文本的边界而不是整个单元格。我一直试图在调试器中捕捉到这个以找出原因,但每次我在程序之间切换时,整个窗口都会重新绘制,所以几乎不可能捕捉到这种事情。

JTable并且JTree都表现得很清醒。这种外观和感觉会描绘 a 的整个行JTree(如 Quaqua 和 Synth),所以也许这也与它有关。也许JXTreeTable有某种假设,即外观不会绘制树的行?如果是这样,有没有办法解决这个问题?问题不只是这种外观和感觉。

编码:

第1轮进一步调查:

我终于设法通过在JXTreeTable. 我看到的是它有一个叫做的东西,它ClippedTreeCellRenderer有一些看起来像是对应于可疑行为的字段:

我还没有确认它肯定是使用这个值来绘制矩形,但textRect它正是它重新绘制的小窗口的大小。所以现在的问题是,到底是从哪里JXTreeTable提取这些值的,为什么要使用它们?

我的直觉告诉我,JXTreeTable's 渲染器以某种方式使用树单元渲染器直接渲染单元,而不是仅仅告诉树本身进行绘制。绘制行背景和展开/折叠图标的逻辑在树中,而不是在单元格中,所以如果这样做,那么它不会始终如一地绘制树是有道理的。

第二轮进一步调查:

我想我完全走错了路。看起来整行都绘制,但是 tree.isPathSelected(path)false为新选择的蓝色行返回并true为刚刚取消选择的行返回。

我可以通过断点确认DefaultTreeSelectionModel树选择仅在您松开鼠标后才会更新,这就是它最终恢复正确渲染的原因。

我将不得不进一步研究 JXTreeTable 以了解它是如何使它们保持同步的。

0 投票
0 回答
255 浏览

java - JXTreeTable 和 BorderHighlighter 在所有行上绘制边框

我在我的 JXTreeTable 上使用 BorderHighlighter 在非叶行的每个表格单元格上方放置一个边框,以便为用户提供更清晰的视觉分隔符。

问题是,当我展开分层列时,分层列中的所有单元格,对于所有行,都包括来自荧光笔的边框。其他列显示得很好。

我的 BorderHighlighter 定义如下:

我正在使用 SwingX 1.6.5。

当它折叠时,顶部 BorderHighlighter 正确显示:

展开后,非层次列显示 BorderHighlighter 右侧,但不显示层次列:

0 投票
1 回答
636 浏览

swing - JXTreeTable 的 TreeTableRender

如何为 JXTreeTable 中的不同列分配不同的渲染器。JXtreeTable 具有不同的列类型(如货币、日期等)。在 JXTable 中,我使用了 getColumn(identifier).setCellRender(TableCellRender) 方法。我应该为 JXTreeTable 做什么?

0 投票
0 回答
359 浏览

java - JXTreeTable 拖放

我在 JXTreeTable 中实现了拖放,但它在第一列中效果不佳。我必须先选择行,将鼠标指针移到其他位置,然后返回才能拖动行。

在其他列上它工作正常。

我认为没有很多选择,这是我设置的:

也许这是一个错误。

谢谢您的帮助。

0 投票
2 回答
145 浏览

java - JXTreeTable 在添加新节点时滚动?

我有一个带有添加按钮的 JXTreeTable。该按钮按预期工作:它在末尾添加了一个新节点,其值(出于测试目的)被硬编码到我的程序中。该行:

告诉 JXTreeTable 识别对 TreeTableModel 所做的更新,并相应地刷新。

然后我执行:

自动选择这个新节点。这可以按预期工作,但我也希望它会自动滚动以使这个新节点出现,但事实并非如此。相反,它会滚动以仅显示倒数第二个节点,而将新节点隐藏在视图之外。

我还尝试使用技巧以编程方式滚动到最终记录。但是,这段代码:

揭示了同样的问题。

奇怪的是,如果我将上述两个代码块中的任何一个附加到“滚动到底部”按钮,并在添加新节点后手动按下此按钮,一切正常!请任何人都可以隔离此错误的原因,或提供修复/解决方法吗?