2014-11-16 5 views
0

Я пытался отсортировать мои узлы в своем 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; 
} 

Любая помощь по этому вопросу будет действительно замечательной.

ответ

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

Прежде всего, спасибо за ответ Alex! В моем jtree у меня есть имена файлов, такие как: Name_someNumber_2014.txt, этот метод сортирует только имена файлов только с буквой или он будет сортировать имена как с номером, так и с буквами в имени? –

+0

Вы можете попытаться использовать компаратор из [этого] (http://stackoverflow.com/questions/16898029/how-to-sort-file-names-in-ascending-order) вопроса. – alex2410

+0

Спасибо, Алекс, это решило мою проблему! –

0

Просто сортировать список детей родителя и вызова метода, модели nodeStructureChanged(parent).

Смежные вопросы