2012-05-19 2 views
0

으로 트리를 채우는 빠르고 쉬운 방법은 지정된 패키지의 jtree (루트 및 하위 노드)를 채우는 빠르고 쉬운 방법입니까? 그래서 예를 들어패키지 목록

:

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

그래서 최종 결과는 다음과 같습니다 :

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

는 의사 코드의 방법이

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

은 ???

답변

2

지정된 패키지의 jtree (루트 및 하위 노드)를 채우는 빠르고 쉬운 방법이 있습니까?

예. 넷빈즈 프로젝트 구조에 의해 Java 패키지 :

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 with NoIcon

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

에 대한 모든 JTree Icons을 제거 할 수 있습니다

는 지금 그 항아리에서 클래스 (또는 항아리와) 애플릿 또는 JWS 응용 프로그램에서. : D +1 –

+0

@ 앤드류 톰슨 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)와 같은 생각을하고있었습니다. :) –

관련 문제