如何为每个JTree节点添加不同的JComboBox?

我有一个JTree,我正在填写我正在编写的游戏数据库程序的技能。

有几个类别和子类别(实际技能),然后是水平技能(有时)。 目前我正在使用一个技能类,内部的一些选项和一些枚举来模拟这个,还有一个方法来检查技能是否属于一个类别(称为isCategory)。 还有两点需要注意:

  1. 不同类型的技能表现不同。
    有些是一次购买,有几次购买,有些可以选择等
  2. 不同类别包含不同的技能。
    例如,武器技能类别有不同类型的武器,但装甲技能在不同的部分。

我已经看到了通过单元格渲染器将ComboBox附加到树中每个节点的非常好的示例。 这是我找到的例子 。

我理解上面的代码,但我看不出如何将combobox附加到节点,而不是树? 我已经阅读了“ 如何使用树木 ”,并且我已经运行了,并查看了一些树的演示代码。 我可以制作基本的树,但是我发现教程有点迟钝,缺乏足够的细节来弄清楚自己如何继续。 我发现了另一个仅将叶节点渲染为复选框的示例 ,这要复杂得多。

显然我想把两者结合起来,能够拥有不同的类别,能够拥有不同的技能,不同的技能有不同的熟练程度。 然而,我能想到这样做的唯一方法是为不同的类型设置不同的JComboBoxModel但我不知道如何做到这一点,我无法找到方法。 我试图编辑复选框示例以使用ComboBoxes,但对于我的生活我无法理解。

有人可以给我一个提示,告诉我采取什么方法,因为我是Java的新手并且在努力弄清楚要做什么?

这是一个好的起点吗?

从概念上讲,是的。 JTableJTree使用flyweight模式来渲染和编辑单元/节点。

  • 此示例引用了一个基本的TreeCellRenderer
  • 此示例说明了使用默认渲染器的简单TreeCellEditor
  • 此示例显示了包含JTableJTreefunction的Outline视图。

图片

您应该实现TreeCellRenderer以及TreeCellEditor 。 两者都应该返回不同型号的JComboBox 。 选择哪种模型应根据value参数(实际上是树节点)在getTreeCellEditorComponent / getTreeCellRenderingComponent决定。