2012-05-19 97 views
0

是否有一種快速和骯髒的方式來填充指定的包的jtree(根和子節點)?快速和骯髒的方式來填充包列表樹

所以例如:

com.mycompany.components.ComponentA 
com.mycompany.components.ComponentB 
com.mycompany.components.ComponentC 

是否有僞代碼的方式:

Jtree tree = new JTree(Package.getPackage("com.mycompany")); 

所以最後的結果是:

com.mycompany.components 
|---- com.mycompany.components.ComponentA 
|---- com.mycompany.components.ComponentB 
|---- com.mycompany.components.ComponentC 

???

回答

2

是否有一種快速和骯髒的方式來填充指定的包的jtree(根和子節點)?

是的。 Java包通過NetBeans項目結構:

enter image description here

import java.awt.*; 
import java.io.File; 
import java.util.Collections; 
import java.util.Vector; 
import javax.swing.*; 
import javax.swing.event.TreeSelectionEvent; 
import javax.swing.event.TreeSelectionListener; 
import javax.swing.tree.DefaultMutableTreeNode; 

public class FileTree extends JPanel { 

    private static final long serialVersionUID = 1L; 

    public FileTree(File dir) { 
     setLayout(new BorderLayout()); 
     JTree tree = new JTree(addNodes(null, dir)); 
     tree.addTreeSelectionListener(new TreeSelectionListener() { 

      public void valueChanged(TreeSelectionEvent e) { 
       DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getPath().getLastPathComponent(); 
       System.out.println("You selected " + node); 
      } 
     }); 
     JScrollPane scrollpane = new JScrollPane(); 
     scrollpane.getViewport().add(tree); 
     add(BorderLayout.CENTER, scrollpane); 
    } 

    private DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) { 
     String curPath = dir.getPath(); 
     DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath); 
     if (curTop != null) { 
      curTop.add(curDir); 
     } 
     Vector<String> ol = new Vector<String>(); 
     String[] tmp = dir.list(); 
     for (int i = 0; i < tmp.length; i++) { 
      ol.addElement(tmp[i]); 
     } 
     Collections.sort(ol, String.CASE_INSENSITIVE_ORDER); 
     File f; 
     Vector<Object> files = new Vector<Object>(); 
     for (int i = 0; i < ol.size(); i++) { 
      String thisObject = ol.elementAt(i); 
      String newPath; 
      if (curPath.equals(".")) { 
       newPath = thisObject; 
      } else { 
       newPath = curPath + File.separator + thisObject; 
      } 
      if ((f = new File(newPath)).isDirectory()) { 
       addNodes(curDir, f); 
      } else { 
       files.addElement(thisObject); 
      } 
     } 
     for (int fnum = 0; fnum < files.size(); fnum++) { 
      curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum))); 
     } 
     return curDir; 
    } 

    @Override 
    public Dimension getMinimumSize() { 
     return new Dimension(200, 400); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(200, 400); 
    } 

    public static void main(final String[] av) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       JFrame frame = new JFrame("FileTree"); 
       frame.setForeground(Color.black); 
       frame.setBackground(Color.lightGray); 
       Container cp = frame.getContentPane(); 
       if (av.length == 0) { 
        cp.add(new FileTree(new File("."))); 
       } else { 
        cp.setLayout(new BoxLayout(cp, BoxLayout.X_AXIS)); 
        for (int i = 0; i < av.length; i++) { 
         cp.add(new FileTree(new File(av[i]))); 
        } 
       } 
       frame.pack(); 
       frame.setVisible(true); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      } 
     }); 
    } 
} 

編輯

,你可以刪除所有JTree Icons,例如JTree with NoIcon

DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer(); 
renderer.setLeafIcon(null); 
renderer.setClosedIcon(null); 
renderer.setOpenIcon(null); 
+0

現在做的是從一個罐類(或廣口瓶)在applet或JWS應用程序中。 :D +1 –

+0

@Andrew Thompson phaaa [你的意思](http://stackoverflow.com/questions/6629995/test-if-a-class-contains-an-instance-variable-based-on-its-name ) – mKorbel

+0

我在想更像[*嚴格來說,無法列出包中的類*](http://stackoverflow.com/a/3527428/418556)。 :) –

相關問題