【问题标题】:JTree editor component hides the JTreeJTree 编辑器组件隐藏了 JTree
【发布时间】: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


【解决方案1】:

谢谢 George Z.,我未能在一个极简示例中重现该问题。这让我找到了一个解决方案。问题是布局管理器:如果您为 JTree 设置布局管理器,它仅在编辑组件时适用,因此当单击组件时布局会发生变化。

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

【讨论】:

  • "解决方案: 确保 JTree 的布局管理器为空。" 如果将布局管理器设置为 null 是答案,这一定是个愚蠢的问题。否决问答以警告其他人不要使用这种方法。
猜你喜欢
  • 2020-07-18
  • 1970-01-01
  • 2011-09-23
  • 2010-10-24
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2015-10-29
  • 2012-09-20
相关资源
最近更新 更多