2011-11-16 53 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

相關問題