ユーザーがノードをドラッグ/ドロップまたは再配置できるJTreeがあります。保存時に、ファイルタイプのノードがフォルダータイプのノードの前に表示されるようにノードを再配置する必要があります。ファイル/フォルダー名を並べ替える必要はありません。
ユーザー ツリー:
-FolderA
+FFA1
-FA1
-FA2
-FolderB
-FB1
-File1
-File2
+FolderC
-File3
結果のツリー:
-File1
-File2
-File3
-FolderA
-FA1
-FA2
+FAF1
-FolderB
-FB1
+FolderC
以下のコードがありますが、うまくいきましたが、それが適切な方法なのか、それとも適切な方法なのかはわかりません。2 つの解決策のどちらが優れているか、または別の方法を提案できますか。
どうもありがとうございます。
解決策 1:
private void arrange(DefaultMutableTreeNode parent){
DefaultMutableTreeNode sorted = new DefaultMutableTreeNode();
List<DefaultMutableTreeNode> files = new ArrayList<DefaultMutableTreeNode>();
List<DefaultMutableTreeNode> folders = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < parent.getChildCount(); i++){
DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent.getChildAt(i);
int type = ((BusinessObject) node.getUserObject()).getType();
if (type == BusinessObject.FILE)
files.add(node);
else{
arrange(node);
folders.add(node);
}
}
for (int i = 0; i < files.size(); i++)
sorted.add((DefaultMutableTreeNode) files.get(i));
for (int i = 0; i < folders.size(); i++)
sorted.add((DefaultMutableTreeNode) folders.get(i));
while (sorted.getChildCount() > 0)
parent.add((DefaultMutableTreeNode) sorted.getChildAt(0));
sorted = null;
files = null;
folders = null;
}
解決策 2:
private void arrange(DefaultMutableTreeNode parent){
DefaultMutableTreeNode sorted = new DefaultMutableTreeNode();
List<DefaultMutableTreeNode> nodes = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < parent.getChildCount(); i++){
DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent.getChildAt(i);
int type = ((BusinessObject) node.getUserObject()).getType();
if (type == BusinessObject.FILE)
nodes.add(node);
}
for (int i = 0; i < parent.getChildCount(); i++){
DefaultMutableTreeNode node = (DefaultMutableTreeNode) parent.getChildAt(i);
int type = ((BusinessObject) node.getUserObject()).getType();
if (type == BusinessObject.FOLDER){
arrange(node);
nodes.add(node);
}
}
for (int i = 0; i < nodes.size(); i++)
sorted.add((DefaultMutableTreeNode) nodes.get(i));
while (sorted.getChildCount() > 0)
parent.add((DefaultMutableTreeNode) sorted.getChildAt(0));
sorted = null;
nodes = null;
}