JTree如何响应已更改的DefaultMutableTreeNode?

时间:2012-06-17 15:20:22

标签: java swing jtree treenode event-dispatch-thread

如果在非EDT线程中更改DefaultMutableTreeNode的用户对象,只是试图弄清楚线程方面会发生什么?

我不是在谈论DefaultTreeModel事件,即insertNodeInto和removeNodeFromParent,我很清楚应该总是在EDT中运行... 我认为......

在更改节点的用户对象的情况下,似乎JTree.TreeModelHandler是“监听”此类事件的东西......但是有理由期望只会通知侦听器这样的事件更改事件发生的线程?并且只会在那个自相同的线程中传播它的响应吗?

因此,显然,我假设这是一个相当基本的“观察者”模式。

这是否意味着JTree节点中的大多数变化实际上必须在EDT中发生,否则会发生在您预期的情况下未发生的事情的风险?

在DefaultMutableTreeNode的API中确实说“你必须自己进行同步”......

1 个答案:

答案 0 :(得分:4)

Swing线程规则非常简单:Swing是单线程的,所有涉及Swing组件的操作都应该在EDT上进行。

因此,只要在TreeModel上设置了包含DefaultMutableTreeNode的{​​{1}},您就可以更好地确保对模型(或节点)所做的任何更改以及相应的事件在美国东部时间被解雇了。