2014-06-14 108 views
0

我試圖完成的是取一個預先定義的文件路徑,並在JTree裏面的文件路徑中顯示每個文件夾和文件。如何顯示JTree中文件夾的內容?

簡單;

Folder1 
Folder2 
    Folder3a 
     ->File3a 
    ->File2a 
    ->File2b 

我有什麼到目前爲止是這樣的:

public class GUI extends JPanel { 

public GUI() { 

    super(new GridLayout(1, 2, 20, 0)); 
    setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); 

    try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } catch (final Exception ignored) { 
    } 

    final JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 



    frame.setContentPane(this); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

} 

我很想對如何進行一些指導。到目前爲止,所有的東西都是我經歷過的大量閱讀的彙編,我不確定如何完成我想要的東西。

+0

如果我沿着這條路線走下去,那就會帶來更多的問題; 1)如何獲取根目錄下所有文件的路徑? –

+2

查看@AndrewThompson的[File Browser GUI](http://codereview.stackexchange.com/questions/4446/file-browser-gui)獲取一些想法 –

回答

0
public class FileTree extends JPanel { 
/** Construct a FileTree */ 
public FileTree(File dir) { 
setLayout(new BorderLayout()); 

// Make a tree list with all the nodes, and make it a JTree 
JTree tree = new JTree(addNodes(null, dir)); 

// Add a listener 
tree.addTreeSelectionListener(new TreeSelectionListener() { 
    public void valueChanged(TreeSelectionEvent e) { 
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) e 
     .getPath().getLastPathComponent(); 
    System.out.println("You selected " + node); 
    } 
}); 

// Lastly, put the JTree into a JScrollPane. 
JScrollPane scrollpane = new JScrollPane(); 
scrollpane.getViewport().add(tree); 
add(BorderLayout.CENTER, scrollpane); 
} 

/** Add nodes from under "dir" into curTop. Highly recursive. */ 
DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) { 
String curPath = dir.getPath(); 
DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath); 
if (curTop != null) { // should only be null at root 
    curTop.add(curDir); 
} 
Vector ol = new Vector(); 
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 files = new Vector(); 
// Make two passes, one for Dirs and one for Files. This is #1. 
    for (int i = 0; i < ol.size(); i++) { 
    String thisObject = (String) 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); 
} 
// Pass two: for files. 
for (int fnum = 0; fnum < files.size(); fnum++) 
    curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum))); 
return curDir; 
} 

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

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

/** Main: make a Frame, add a FileTree */ 
public static void main(String[] av) { 

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); 
} 
} 
相關問題