【发布时间】:2012-03-07 15:16:38
【问题描述】:
我正在显示一个自定义对象树,并且我已经设置了自定义自定义 CellTreeEditor 和 CellTreeRenderer。
现在我真正想要的是始终以“编辑模式”显示所有对象。现在我的CellTreeRenderer.getTreeCellRendererComponent() 和CellTreeEditor.getTreeCellEditorComponent() 实现几乎相同。这种工作,但我仍然需要单击一个节点来聚焦它,然后才能进行任何编辑。
有没有更明智的做法,比如说不应该使用任何渲染器,默认为我的CellTreeEditor?
******更新****
澄清一下:我所拥有的是一棵看起来像这样的树(是的,它看起来也很垃圾,但这不是重点):
现在,我通过一个渲染器和一个从getTreeCell[Renderer|Editor]Component() 返回相同组件的编辑器来实现这一点。
如果我单击渲染器提供的 ComboBox 上的向下箭头,它会在打开下拉列表时轻微闪烁,但随后会被我的编辑器组件中断并替换。这意味着我必须再次单击它才能打开下拉菜单。这是我要避免的行为。
【问题讨论】:
-
不,你不想让你的编辑器在单元格之间共享(讨厌的事情开始发生)相反,添加一个 TreeCellListener 来监听线索(又名:聚焦)选择路径中的变化,然后在该路径上明确开始编辑
-
暂时忘记闪烁(这可能是由于渲染器与编辑器的轻微对齐错误)您基本上必须抓住启动编辑器的 mouseEvent,检查它是否在按钮内,如果因此,一旦将编辑器添加到层次结构中,就以编程方式显示下拉列表 - 说起来容易做起来难,我知道 :) 显示一个包含您的自定义渲染器/编辑器的 sscce 怎么样,以便我们尝试把它放在那里?