首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TreeCellRenderer的设计

TreeCellRenderer的设计
EN

Stack Overflow用户
提问于 2010-07-08 05:15:51
回答 1查看 1.4K关注 0票数 1

我一直在调查JTree和TreeCellRenderer。一般来说,应用程序(有一个JTree)只有一个TreeCellRenderer实例。应用程序对TreeCellRenderer的getTreeCellRendererComponent方法进行多次调用,以决定如何绘制每个TreeCell,并且在许多情况下(当单元格被选中、取消选择、移动、滚动等等时)都会进行这样的调用。为什么他们决定这样做,而不是拥有多个TreeCellRenderer实例,每个实例负责一个单元?

我正在尝试创建一个JTree,其中每个单元格都包含一个复选框。用户可以选中/不选中该复选框。然后,根据这些复选框的状态设置TreeNode userObject的值。但是,从当前的JTree设计来看,这是不可能的--因为只有一个JCheckBox实例,并且只用于显示单元格的外观(您不能真正检查它)。在某种意义上,我希望将TreeCell的选择和复选框分开。

我有一些解决办法(实现MouseAdapter并检查鼠标单击是否在复选框呈现的位置关闭,然后通过更改复选框在TreeCellRenderer中的外观来模拟复选框),但我仍然想知道是否可以更直接地完成这一任务。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2010-07-08 05:45:25

为什么他们决定这样做,而不是拥有多个TreeCellRenderer实例,每个实例负责一个单元?

这是http://en.wikipedia.org/wiki/Flyweight_pattern的一个很好的例子。

对于复选框树,我喜欢org.netbeans.swing.outline.Outline,提到了这里,但其他示例是可用的。

增编:仔细阅读你的问题,你会问:

在某种意义上,我希望将TreeCell的选择和复选框分开。

这是正确的本能:数据(检查或未检查)应该存储在模型(TreeModel)中,而不是视图(JCheckBox)中。因此,示例在它的(隐式)模型中使用了CheckBoxNode的实例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3200826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档