按字母顺序对JTree节点排序

时间:2014-11-16 13:24:43

标签: java swing sorting 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;
}

对此的任何帮助都会非常棒。

2 个答案:

答案 0 :(得分:0)

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;
}

答案 1 :(得分:0)

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