2016-03-24 10 views
0

Bu Yapının, JTree

varsayalım ebeveyn/çocuk olarak aynı klasör klasör yapısını/alt klasörü göstermeye çalışıyorum: enter image description here

ancak nasıl mücadele ediyorum Çocukları ana düğüme eklemek için, Computerscience adında bir ana klasörüm var, tüm alt klasörlerini alıyorum ve bunları alt öğe olarak ekledim, bu alt öğelerden herhangi biri, içlerinde daha fazla alt klasör olduğunda ana baba olabilir, özyinelemeye ihtiyacım var gibi görünüyor işlev ancak bunu yapamıyorum, işte yaptığım şey:

import java.awt.BorderLayout; 
import java.io.File; 
import java.util.Arrays; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.DefaultTreeModel; 

public class TestTree extends JFrame { 

    JTree tree; 
    DefaultTreeModel treeModel; 

    public TestTree() { 
     super("Tree Test Example"); 
     setSize(400, 300); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    protected String[] getListFiles(String Path) { 
     File file = new File(Path); 
     String[] names = file.list(); 
     return names; 
    } 

    public void init() { 
     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Computerscience"); 
     String[] names = this.getListFiles("C:\\Users\\neginn\\Google Drive\\NetBeansProjects\\computerscience"); 
     for (String name : names) { 
      root.add(new DefaultMutableTreeNode(name)); 
      String[] names_level_2 = this.getListFiles("C:\\Users\\neginn\\Google Drive\\NetBeansProjects\\computerscience\\" + name); 
      if (names_level_2 != null) { 
       for (String name_level2 : names_level_2) { 
        int folder_index = Arrays.asList(names_level_2).indexOf(name_level2); 
        treeModel.insertNodeInto(root, (DefaultMutableTreeNode) root.getChildAt(folder_index), folder_index); 
       } 
      } 
     } 
     treeModel = new DefaultTreeModel(root); 
     tree = new JTree(treeModel); 

     getContentPane().add(tree, BorderLayout.CENTER); 
    } 

    public static void main(String args[]) { 
     TestTree tt = new TestTree(); 
     tt.init(); 
     tt.setVisible(true); 
    } 
} 

benim sorunum treeModel.insertNodeInto

+0

Bu düğümleri yinelemeli olarak eklemeniz gerekir; addNodes (Node parent) ... alt dosya adlarını al ... parent.add (child) ... eğer çocuk varsa ... addNodes (çocuk) –

cevap

0

Dediğiniz gibi, tekrarlamalı bir yöntem yazmak gerekir uyumludur. Bir tane yazmayı denedim, lütfen aşağıdaki kodu test edin:

public class TestTree extends JFrame { 

    JTree tree; 
    DefaultTreeModel treeModel; 

    public TestTree() { 
     super("Tree Test Example"); 
     setSize(400, 300); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    protected File[] getListFiles(String Path) { 
     File file = new File(Path); 
     return file.listFiles(); 
    } 

    private void addChilds(DefaultMutableTreeNode rootNode, String path) { 
     File[] files = this.getListFiles(path); 
     for(File file:files) { 
      if(file.isDirectory()) { 
       DefaultMutableTreeNode subDirectory = new DefaultMutableTreeNode(file.getName()); 
       addChilds(subDirectory, file.getAbsolutePath()); 
       rootNode.add(subDirectory); 
      } else { 
       rootNode.add(new DefaultMutableTreeNode(file.getName())); 
      } 
     } 
    } 

    public void init() { 
     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Computerscience"); 

     addChilds(root, "C:\\Users\\neginn\\Google Drive\\NetBeansProjects\\computerscience"); 

     treeModel = new DefaultTreeModel(root); 
     tree = new JTree(treeModel); 

     getContentPane().add(tree, BorderLayout.CENTER); 
    } 

    public static void main(String args[]) { 
     TestTree tt = new TestTree(); 
     tt.init(); 
     tt.setVisible(true); 
    } 
} 
+0

Keşke senin kadar hızlı olsaydım !!! çok teşekkür ederim :-) – Nickool

+0

@Nickool Teşekkürler :) – rdonuk