2012-05-19 2 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); 
      } 
     }); 
    } 
} 

EDIT

вы можете удалить все JTree Icons, например JTree with NoIcon

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

Теперь сделать это с помощью классов из баночки (или Баночки) в апплете или приложении 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). :) –

Смежные вопросы