按字母顺序对 JTree 节点进行排序



几天来我一直在尝试在我的 JTree 中对我的节点进行排序,但没有成功。这是我使用给定文件夹的结构填充 JTree 的代码。这是工作正常的:所有文件夹都按字母顺序显示,但不按文件夹中的文件显示。

DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) {
    File[] tmp = dir.listFiles();
    Vector<File> ol = new Vector<File>();
    ol.addAll(Arrays.asList(tmp));
    // Pass two: for files.
    for (int fnum = 0; fnum < ol.size(); fnum++) {
        File file = ol.elementAt(fnum);
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
        if (file.isDirectory()) {
            addNodes(node, file);
        }
        curTop.add(node);
    }
    return curTop;
}

对此的任何帮助都很棒。

dir.listFiles() - 不保证文件的顺序,因为您需要像下面这样自己排序:

DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) {
    File[] tmp = dir.listFiles();
    List<File> ol = new ArrayList<File>(Arrays.asList(tmp));
    Collections.sort(ol, new Comparator<File>() {
        @Override
        public int compare(File o1, File o2) {
            if(o1.isDirectory() && o2.isDirectory()){
                return o1.compareTo(o2);
            } else if(o1.isDirectory()){
                return -1;
            } else if(o2.isDirectory()){
                return 1;
            }
            return o1.compareTo(o2);
        }
    });

    for (int fnum = 0; fnum < ol.size(); fnum++) {
        File file = ol.get(fnum);
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
        if (file.isDirectory()) {
            addNodes(node, file);
        }
        curTop.add(node);
    }
    return curTop;
}

只需对父项的子项列表进行排序,然后调用模型的方法nodeStructureChanged(parent)

最新更新