1

我有一个非常大的项目,我正在处理,图形编辑器,我在使用摆动组件时遇到了一些大问题。然而,现在我有一个程序员最可怕的噩梦,一个只在某些时候发生的错误。

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

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

要知道的另一件事是我通过我setSelectedPath/Paths的方法选择我的元素JTree

一些可能有助于理解我所做的事情和我尝试过的事情:

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

我希望有人知道该怎么做,尽管我认为这是一个非常复杂的问题。请询问任何可以帮助您帮助我的事情。

4

2 回答 2

4

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

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

于 2012-06-03T20:02:59.333 回答
1
  • 如果addWhatever()JTree触发正确的TreeModelEvent( fireChildAdded(), firePathChanged(), fireChildrenLoaded(), treeStructureChanged())

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

于 2012-06-03T12:00:19.673 回答