Java Swing JTree扩展

Java Swing JTree扩展,java,swing,Java,Swing,此方法按预期工作-它创建一个JTree,其中包含一个根节点和两个子容器节点(每个子容器节点各有一个叶节点): 在这种情况下,树从关闭开始。我希望应用程序从完全扩展所有节点开始,因此我首先添加以下内容: tree.expandPath(treePath); 但是当我从上面的代码中取消注释时,第二组子节点没有显示,即:Project 2和Version 2没有显示。事实上,所有随后添加的节点都不会出现 不管它值多少钱,我都在使用JDK1.5。从文档中,我似乎看不到任何限制,也看不到为什么这

此方法按预期工作-它创建一个JTree,其中包含一个根节点和两个子容器节点(每个子容器节点各有一个叶节点):

在这种情况下,树从关闭开始。我希望应用程序从完全扩展所有节点开始,因此我首先添加以下内容:

    tree.expandPath(treePath);
但是当我从上面的代码中取消注释时,第二组子节点没有显示,即:Project 2和Version 2没有显示。事实上,所有随后添加的节点都不会出现

不管它值多少钱,我都在使用JDK1.5。从文档中,我似乎看不到任何限制,也看不到为什么这种方法会产生如此不良的影响。。。我将试着查看源代码,但希望有人能很好地了解这是什么以及为什么预期的行为。我想知道是否每个后续节点“add”都被禁止了——但我无法想象它在大多数运行时用例中会起作用

谢谢


-路德

如果节点被添加到已扩展的节点,则需要


如果只想重新加载大型树的一小部分,则此选项更为有用。

如果将节点添加到已展开的节点,则需要


如果您只想重新加载一棵大树的一小部分,这会更有用。

不幸的是,Swing通常是“有用的”。在这种情况下,它将根据提供的数据为您创建模型,这与如果您提供了
向量
,则
JList
将创建模型非常相似

JTree
和同谋(主要是可插拔的外观和感觉)将向模型添加侦听器,以随时了解更新。如果您只是更改(隐式)模型背后的数据,那么除了偶然更新之外,不会更新任何内容


所以,您应该做的是显式地创建一个模型。当模型数据发生更改时(当然,始终在EDT上),会触发相关事件。

不幸的是,Swing通常是“有用的”。在这种情况下,它将根据提供的数据为您创建模型,这与如果您提供了
向量
,则
JList
将创建模型非常相似

JTree
和同谋(主要是可插拔的外观和感觉)将向模型添加侦听器,以随时了解更新。如果您只是更改(隐式)模型背后的数据,那么除了偶然更新之外,不会更新任何内容

所以,您应该做的是显式地创建一个模型。当模型数据发生更改时(当然,始终在EDT上),会触发相关事件。

Ah。。。模型

你的答案有点详细,而且。。。。甚至

最后我做了一些类似的事情:

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.insertNodeInto(newNode, parent, index); 
这可以让模型直接了解情况。在我的情况下,这个比例很好

现在,如何将其中一个标记为答案

啊。。。模型

你的答案有点详细,而且。。。。甚至

最后我做了一些类似的事情:

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.insertNodeInto(newNode, parent, index); 
这可以让模型直接了解情况。在我的情况下,这个比例很好

现在,如何将其中一个标记为答案

((DefaultTreeModel)tree.getModel()).reload(top);
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.insertNodeInto(newNode, parent, index);