私が直面している問題は、JTree のツリー モデルにあります。
ルート ノードを次のように定義しました。
javax.swing.tree.DefaultMutableTreeNode rootNode = new javax.swing.tree.DefaultMutableTreeNode(projectName);
アプリケーションの最初の起動時に、treeModel を作成してロードする必要があります。このために、次のような情報を含むファイル meta.txt を使用しています。
1QuotesPrice.Job
2QuotesPrice.Df
1Quotes.Job
2Quotes.Wf
3Quotes.Df
2Falkeblang.Wf
3Falkeblang.Df
最初の列はレベルで、2 番目の列はツリーのノードです。この情報に基づいて、ツリー モデルを作成したいのですが、ここで障害に直面しています。
上記のノードをルート ノードに追加するために適用するロジックがわかりません。私が試したことにはすべて欠陥があるようです。ここでの問題は、レベル数が固定されていないことです。そのため、単純に if-else 構文を使用することはできません。次のコードを使用しています。
String treeMeta=this.projectsDir+"\\"+projectName+"\\"+"meta.txt";
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(projectName);
File f1=new File(treeMeta);
inputStream = new Scanner(f1);
while(inputStream.hasNext()){
String val=inputStream.next();
System.out.println("!@#$%"+val+"!@#$%");
treeNodePrev=treeNode;
prevLevel=level;
level=val.substring(0,1);
nodeVal=val.substring(1);
if(level.equals("1")){
prevNode=projectName;
treeNode = new DefaultMutableTreeNode(nodeVal);
System.out.println("added to root node");
rootNode.add(treeNode);
//System.out.println("added to root node");
}else if(Integer.parseInt(level)>Integer.parseInt(prevLevel)){
prevNode=nodeVal;
treeNode = new DefaultMutableTreeNode(nodeVal);
treeNodePrev.add(treeNode);
}else if(Integer.parseInt(level)==Integer.parseInt(prevLevel)){
prevNode=nodeVal;
treeNode = new DefaultMutableTreeNode(nodeVal);
prevParentTreeNode=(DefaultMutableTreeNode)treeNodePrev.getParent();
//System.out.println(prevParentTreeNode.getParent().toString());
prevParentTreeNode.add(treeNode);
}
}
jProjectTree.setModel(new javax.swing.tree.DefaultTreeModel(rootNode));
jScrollPane2.setViewportView(jProjectTree);
これはうまく機能しているようですが、これが正しいアプローチであるかどうか誰か教えてください。