gpt4 book ai didi

java - 从 JTree 中的文本文件动态填充树模型

转载 作者:行者123 更新时间:2023-12-01 04:26:03 25 4
gpt4 key购买 nike

我面临的问题是 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

第一列是级别,第二列是树的节点。现在,根据这些信息,我想创建树模型,但在这里遇到了障碍。

我不确定将上述节点添加到根节点的逻辑。我尝试过的每件事似乎都有缺陷。这里的问题是级别数不固定,所以我不能简单地使用 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);

这似乎工作正常,但有人可以告诉我这是否是正确的方法?

最佳答案

这可能会更干净一些。只需调整计算级别的函数即可...

public static final DefaultMutableTreeNode getTreeNode(File file) throws IOException  {

DefaultMutableTreeNode rootNode = null;
Map<Integer, DefaultMutableTreeNode> levelNodes = new HashMap<Integer, DefaultMutableTreeNode>();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;

while( (line = reader.readLine()) != null ) {

int level = getLevel(line);
String nodeName = getNodeName(line, level);
DefaultMutableTreeNode node = new DefaultMutableTreeNode(nodeName);
levelNodes.put(level, node);
DefaultMutableTreeNode parent = levelNodes.get(level - 1);

if( parent != null ) {
parent.add(node);
}
else {
rootNode = node;
}
}
reader.close();
return rootNode;
}

private static final int getLevel(String line) {

int level = 0;
for ( int i = 0; i < line.length(); i++ ) {
char c = line.charAt(i);
if( c == '\t') {
level++;
}
else {
break;
}
}
return level;
}

private static final String getNodeName(String line, int level) {
return line.substring(level);
}

关于java - 从 JTree 中的文本文件动态填充树模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18483191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com