gpt4 book ai didi

java - TreeCellRenderer 的设计

转载 作者:行者123 更新时间:2023-11-30 05:11:34 26 4
gpt4 key购买 nike

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

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

我有一些解决方法(实现 MouseAdapter 并检查鼠标单击是否靠近呈现复选框的位置,然后通过更改其在 TreeCellRenderer 中的外观来模拟对该框的检查),但我仍然想知道这是否可以做得更直接。谢谢!

最佳答案

Why did they decide to do that instead of having multiple instances of TreeCellRenderer, each responsible for one cell?

这是 flyweight pattern 的一个很好的例子.

对于复选框树,我喜欢 org.netbeans.swing.outline.Outline,提到 here ,但其他examples可用。

附录:仔细阅读您的问题,您会问:

In some sense I want to separate selection of the TreeCell and the checking of the boxes.

这是正确的直觉:数据(选中或未选中)应该存储在模型 (TreeModel) 中,而不是 View (JCheckBox) 中。 example相应地,在其(隐式)模型中使用 CheckBoxNode 的实例。

关于java - TreeCellRenderer 的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com