JTree有时不会扩展

时间:2012-06-03 11:13:02

标签: java swing jtree

我有一个非常大的项目,我正在研究,图形编辑器,我在使用swing组件时遇到了一些大问题。但是,现在我有程序员最糟糕的噩梦,这个错误只发生在某些时候

如果我尝试选择JTree中的元素,无论是在添加元素时,还是在图表中选择它们时选择它们(JInternalFrame),其中一些元素都不会被扩展。

我的结构是这样的,我有一个工作区,包含包含图表的项目和项目。图表中包含我拥有的所有元素,例如圆圈,矩形等,在文件夹中(如果它们是圆圈,则将它们放在圆圈文件夹中......)。

要知道的另一件事是我通过setSelectedPath/Paths的{​​{1}}方法选择我的元素。

有些事情可能有助于理解我的工作和尝试的内容:

  • 我确保我的节点知道如何获得root权限。 (JTree返回好路径)
  • 我尝试直接向树木选择模型和树添加路径
  • 我已将树getTreeModel.getPathToRoot设置为true
  • 我手动展开树时选择了节点(之后甚至会展开),直到我添加导致问题的新元素
  • 这种情况在切换5种类型的元素时会发生一次,当我在添加其他类型的元素后添加其他类型的元素时会发生一些奇怪的事情

我希望有人知道该怎么做,虽然我认为这是一个非常复杂的问题。请问任何有助于我帮助的事情。

2 个答案:

答案 0 :(得分:3)

好的,谢谢大家回答,但我找到了一个非常简单的解决方法来解决这个问题。 由于某种原因,如果最后一个路径组件是叶子,则扩展的东西没有效果。

我所做的只是让我的叶子节点为isLeaf方法返回错误,而我的所有问题都消失了。

答案 1 :(得分:1)

  • 如果addWhatever()JTree发出正确的TreeModelEvent fireChildAdded()firePathChanged()fireChildrenLoaded()treeStructureChanged()

  • GUI的所有更改都将移至BackGround Task(s),请查看SwingWorkerRunnable#Thread(最清晰,最简单的方式),但需要Runnable#Thread将所有输出(Swing方法)包装到invokeLater