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

时间:2012-08-03 10:57:32

标签: java swing jcombobox jtree

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

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

  1. 不同类型的技能表现不同。
    有些是一次购买,其他几次购买,有些可以选择等等。
  2. 不同的类别包含不同的技能。
    例如武器技能类别有不同类型的武器,但护甲技能在不同的部分。
  3. 我已经看到了通过单元格渲染器将ComboBox附加到树中每个节点的非常好的示例。这是我找到的example

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

  

this会成为一个好的开始吗?

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

  • example引用了基本TreeCellRenderer
  • example说明了使用默认渲染器的简单TreeCellEditor
  • example显示Outline视图,其中包含JTableJTree的功能。

image