几天来我一直在尝试在我的 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)
。