2011-11-16 57 views
1

我用JTree写了一个文件树,现在我正在试图使它更高效。我试图实现延迟加载,但我不能让我的生活让节点识别它们是为了扩展下一层的文件。我试图让他们检查他们的名字对他们的级别的文件名单,并出于某种原因,不起作用。从长远来看,这反正无济于事。我也尝试将文件本身设置为节点内容,但它仍然不会将其识别为文件。如何获得JTree文件树中的节点以知道它是哪个文件?

我确定我错过了一些简单的东西,但我不知道它会是什么。我一直在四处寻找,还没有找到任何东西。任何人都可以帮我解决这个问题吗?

+0

您可能会从[File Browser GUI]上看到的代码开始(http://codereview.stackexchange.com/questions/4446/file-browser-gui )。 –

回答

1

DefaultMutableTreeNode允许您关联一个任意的“用户对象”,在这种情况下可以是它所代表的File。例如:

File file = new File("data.txt"); 
DefaultMutableTreeNode node = new DefaultMutableTreeNode(file); 

然后你只需要一个TreeSelectionListener添加到JTree,并询问选择DefaultMutableTreeNode根据其是否表示目录或文件,以获得其File并采取适当行动。

+0

我如何审问它以获取?你提出的方式是我一直在做这件事,但由于某种原因,它似乎并没有把它看作一个文件。 或者我的问题是它检索节点的方式?这个地方我学会了如何使文件树已经是这样写的: '公共无效的valueChanged(TreeSelectionEvent E){ \t DefaultMutableTreeNode节点=(DefaultMutableTreeNode)e.getPath()getLastPathComponent();' 这是否导致它不再包含其用户对象? – SaintWacko

+0

Bah,编辑限制。忽略我之前的评论,我发现了这个问题。我不小心让部分代码设置节点作为字符串而不是文件。我也选择了它,而不是展开。现在已经掌握了所有这些,只剩下要做的事情就是弄明白为什么它只是将顶层节点叠加在一起,但这应该很容易。谢谢您的帮助! – SaintWacko

1

而不是使用TreeWillExpandListener实现惰性树加载。只需使用自定义树模型,只需要在必要时检查文件即可。可以找到的现有FileTreeModel的一个很好的例子here

相关问题