【发布时间】:2019-07-03 09:03:04
【问题描述】:
我创建了一个自定义的 JTree,它将一些节点呈现为 JTable,但是当尝试编辑/选择表时(左键单击节点),表会调整大小并将 JTree 隐藏在其后面。 我觉得这很奇怪,因为 ESC 会关闭编辑器(JTable)并再次显示树。我觉得这是一个功能??但我想要的是能够与表进行交互,因为它呈现与树可见。
到目前为止,我已经覆盖了:
- AbstractLayoutCache.NodeDimensions.getNodeDimensions(....):计算我想要绘制树节点的维度。
- TreeCellRenderer.getTreeCellRendererComponent(...) :创建要以正确的首选大小呈现(和编辑)的不同组件。
- 扩展 AbstractCellEditor 并实现的单元格编辑器 TreeCellEditor : 它调用渲染器来获取编辑组件(完全相同的组件)。
- ComponentAdapter 将所有内容联系在一起。
- ComponentAdapter.getNodeDimensions 来计算节点绘图区域。
我注意到:
- VariableHeightLayoutCache 似乎不会按计划影响显示元素的大小(通过调试验证)。
- 绘制编辑器组件时不调用 JTree.paint。
理想情况下,应该在渲染器组件上绘制(或替换)编辑器组件,以使交互更加直观。
【问题讨论】:
-
考虑给我们一个minimal reproducible example以获得更多帮助。
-
谢谢,我未能在一个简约示例中重现该问题。这让我找到了一个解决方案。问题是布局管理器:如果您为 JTree 设置布局管理器,它仅在编辑组件时适用,因此当单击组件时布局会发生变化。 解决办法:确保JTree的布局管理器为空。
标签: java swing jtable size jtree