1

有 2 个JTree:JTree1JTree2. 请注意,节点(国家、城市、颜色、蓝色...)都将实现为JCheckboxes,以便用户可以通过选择相应的复选框为每个城市或整个国家选择特定的颜色。

问题:

Q1。我希望每个国家或城市都可以选择自己的颜色。意味着如果用户想要city1.1蓝色和紫色以及city2.1红色,那么他首先必须选择city1.1复选框,然后选择蓝色和紫色,然后当他选择时city2.1,蓝色和紫色复选框会自动取消选中,这样用户可以选择颜色city2.1。但是当用户city1.1再次选择时,JTree2应该显示 city1.1 的选定颜色(蓝色和紫色)​​。

  • 因此,为此目的,JTree(其节点作为复选框)是正确的实现选项还是我应该使用其他选项JComponent

  • 如果 JTree 是一个正确的选项,那么我怎么能记住每个城市的颜色呢?

4

1 回答 1

2

因此,出于这个目的,JTree(其节点作为复选框)是正确的选项来实现还是我应该使用其他一些 JComponent?

不完全确定您的意思,但我个人不会使用JTree在右侧显示选项。我认为在这种特殊情况下呈现一个包含选项的JPanel要简单得多。对于您的示例,左侧似乎很好,尽管我真的不知道将进入树中的数据类型。

如果 JTree 是一个正确的选项,那么我怎么能记住每个城市的颜色呢?

请注意,我将做几个假设:

  1. 包含您的国家和城市的左侧仍然是JTree,右侧仍然可以是JTreeJPanel
  2. 您希望选项在用户选择左侧的不同节点之前完全按照用户上次设置的方式显示。

实现这一点的最简单方法是将TreeSelectionListener添加到树的(包含国家和城市的)选择模型中。TreeSelectionListener提供了一个TreeSelectionEvent,它提供了选中的节点和将选中的节点。这将使您有机会提取为选择更改的节点设置的颜色设置,以及选择更改为的节点颜色设置。应将TreeSelectionListener添加到从JTree获得的TreeSelectionModel,通过调用它的getSelectionModel方法。

如果您使用此技术,当您使用最后选择的选项执行操作时,您需要在执行操作之前再获取一次选项。例如,如果您有一个“保存”按钮,您应该检查提取左侧选择的节点的颜色设置。这是为了捕获用户可能已经做出的任何侦听器未捕获的更改(因为侦听器仅在左手选择更改时触发)。

如果你需要一个例子,我在http://www.box.net/shared/hgbet4uf6k写了一个。

于 2010-03-09T13:49:02.740 回答