2013-01-23 20 views
0

我從DefaultMutableTreeNode對象構建一個JContentPane顯示JTree。樹意圖顯示本地文件系統。數據應該根據請求加載,因此當用戶想要擴展時。這很好,但只要節點中沒有子項目,它就會顯示一個文件圖標,並在插入子項目時變成文件夾圖標。DefaultMutableTreeNode圖標

雖然有(但沒有)子項目,但我怎樣才能使節點始終顯示文件夾圖標?

+0

參見[*文件瀏覽器GUI *](http://codereview.stackexchange.com/q/4446/6692)。 – trashgod

回答

2

您需要爲您的樹實現單元格渲染器。所以你可以定義節點的圖標。 See here樣品爲一個表(樹也有方法setCellRenderer

+0

僅作爲最後一項措施:如果您只需要區分文件夾和文件,只需使用ask/allowsChildren屬性(假設爲DefaultTreeModel) – kleopatra

+0

謝謝您的提示。我從來沒有使用過這些屬性(總是通過渲染器)。 –

1

使用DefaultMutableTreeNode(或樹節點的自定義實現),該裝置區分文件空文件夾是其allowsChildren屬性:

// get a list of files 
File[] files = new File(".").listFiles(); 
// configure the nodes' allowsChildren as the isDir of the File object 
for (File file : files) { 
    root.add(new DefaultMutableTreeNode(file, file.isDirectory())); 
}   
// configure the TreeModel to use nodes' allowsChildren property to 
// decide on its leaf-ness 
DefaultTreeModel model = new DefaultTreeModel(root, true); 
1

我用這個:

DefaultMutableTreeNode root = new DefaultMutableTreeNode(); 
DefaultTreeModel treeModel = new DefaultTreeModel (root); 
tree = new JTree (treeModel); 
addFiles (root);       // build the catalog tree recursively 
treeModel.setAsksAllowsChildren (true);  // allows empty nodes to appear as folders 

if (file.isDirectory()) 
    newNode.setAllowsChildren (true); 
在addFiles

()例程。 setAsksAllowsChildren(true)需要在構建樹後生效。