JTree编辑器组件隐藏了JTree

时间:2019-07-03 09:03:04

标签: java swing jtable size jtree

我已经创建了一个自定义的JTree,将某些节点呈现为JTable,但是当尝试编辑/选择表(在节点上单击鼠标左键)时,该表将调整大小并将其隐藏在其后。 我发现这很奇怪,因为ESC关闭编辑器(JTable)并再次显示树。我觉得这是一个功能??但是我想要的是能够与表进行交互,因为它是在树可见的情况下呈现的。

到目前为止,我已经覆盖:

  • AbstractLayoutCache.NodeDimensions.getNodeDimensions(....):计算要在其中绘制树节点的尺寸。
  • TreeCellRenderer.getTreeCellRendererComponent(...):以正确的首选大小创建要渲染(和编辑)的不同组件。
  • 扩展AbstractCellEditor并实现的单元格编辑器 TreeCellEditor:它调用渲染器以获取编辑组件(完全相同的组件)。
  • ComponentAdapter将所有内容捆绑在一起。
  • ComponentAdapter.getNodeDimensions以计算节点绘图区域。

我注意到:

  • VariableHeightLayoutCache似乎并没有按计划影响所显示元素的大小(通过调试验证)。
  • 绘制编辑器组件时不会调用JTree.paint。

理想情况下,应在rendrer组件上绘制(或替换)编辑器组件,以使交互变得直观。

1 个答案:

答案 0 :(得分:-1)

谢谢George Z.,我未能以一个简单的例子重现此问题。这使我找到了解决方案。问题是布局管理器:如果为JTree设置了布局管理器,则它仅在编辑组件时适用,因此单击组件时会更改布局。

解决方案:确保JTree的布局管理器为空。