简体   繁体   English

如何仅显示jtree中的文件夹

[英]how to show only folders in jtree

I am currently this code for my JTree, but I want it only to show me the folders and not expand to show the files in every folder. 我目前是我的JTree的这段代码,但我只希望它向我显示文件夹,而不要扩展为向每个文件夹显示文件。 Later I'm going to make my program show the files in another panel... 稍后,我将使程序在另一个面板中显示文件...

  package pm.entitymanager.presentation;

 import java.io.File;
 import java.util.Iterator;
 import java.util.Vector;
 import javax.swing.event.TreeModelEvent;
 import javax.swing.event.TreeModelListener;
 import javax.swing.tree.TreeModel;
 import javax.swing.tree.TreePath;

 /**
  *
  * @author Volpym
  */
public class FileSystemModel implements TreeModel {

private File root;
private Vector listeners = new Vector();

public FileSystemModel(File rootDirectory) {
    root = rootDirectory;
}

@Override
public Object getRoot() {
    return root;
}

@Override
public Object getChild(Object parent, int index) {
    File directory = (File) parent;
    String[] children = directory.list();
 /*       for (int j = 0; j< children.length; j++ ){
        System.out.println(children[j]);
    }       */

    return new FileSystemModel.TreeFile(directory, children[index]);
}

@Override
public int getChildCount(Object parent) {
    File file = (File) parent;
    if (file.isDirectory()) {
        String[] fileList = file.list();

        if (fileList != null) {
            return file.list().length;
        }
    }

}

@Override
public boolean isLeaf(Object node) {
    File file = (File) node;
    return file.isFile();
}

@Override
public int getIndexOfChild(Object parent, Object child) {
    File directory = (File) parent;
    File file = (File) child;
    String[] children = directory.list();
    for (int i = 0; i < children.length; i++) {
        if (file.getName().equals(children[i])) {
            return i;
        }
    }
    return -1;

}

@Override
public void valueForPathChanged(TreePath path, Object value) {
    File oldFile = (File) path.getLastPathComponent();
    String fileParentPath = oldFile.getParent();
    String newFileName = (String) value;
    File targetFile = new File(fileParentPath, newFileName);
    oldFile.renameTo(targetFile);
    File parent = new File(fileParentPath);
    int[] changedChildrenIndices = {getIndexOfChild(parent, targetFile)};
    Object[] changedChildren = {targetFile};
    fileTreeNodesChanged(path.getParentPath(), changedChildrenIndices, changedChildren);

}

private void fileTreeNodesChanged(TreePath parentPath, int[] indices, Object[] children) {
    TreeModelEvent event = new TreeModelEvent(this, parentPath, indices, children);
    Iterator iterator = listeners.iterator();
    TreeModelListener listener = null;
    while (iterator.hasNext()) {
        listener = (TreeModelListener) iterator.next();
        listener.treeNodesChanged(event);
    }
}

@Override
public void addTreeModelListener(TreeModelListener listener) {
    listeners.add(listener);
}

@Override
public void removeTreeModelListener(TreeModelListener listener) {
    listeners.remove(listener);
}

private class TreeFile extends File {

    public TreeFile(File parent, String child) {
        super(parent, child);
    }

    @Override
    public String toString() {
        return getName();
    }
}

} }

Well I used the code provided by @ug_ I was still getting the files, after searching the net i came up with this lines of code and they work. 好吧,我使用了@ug_提供的代码,在网上搜索后,我仍然得到文件,我想到了这行代码,它们可以工作。

    FilenameFilter directoryFilter = new FilenameFilter() {
@Override
public boolean accept(File file, String name) {

     return new File(file, name).isDirectory();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM