Java 树和数组
我在建立一棵树并运行它时遇到了一些问题,结果如下图所示 所以我应该通过一个.txt文件创建一个包含根和子元素的树 这是代码,我将在下面给出一个简短的解释Java 树和数组,java,arrays,sorting,tree,nodes,Java,Arrays,Sorting,Tree,Nodes,我在建立一棵树并运行它时遇到了一些问题,结果如下图所示 所以我应该通过一个.txt文件创建一个包含根和子元素的树 这是代码,我将在下面给出一个简短的解释 public class Tree extends TreeFrame{ Tree() throws FileNotFoundException { super(); } private static final long serialVersionUID = 1L; DefaultT
public class Tree extends TreeFrame{
Tree() throws FileNotFoundException {
super();
}
private static final long serialVersionUID = 1L;
DefaultTreeModel model;
Nod nod;
static Tree main;
static String filen ="";
public void initTree() throws FileNotFoundException{
filen = "C:/Users/MyComp/workspace/Lab5/src/Lab5/Life.txt";
@SuppressWarnings("resource")
Scanner sc = new Scanner(new File(filen));
sc.nextLine();
ArrayList<DefaultMutableTreeNode> ar = null;
while (sc.hasNextLine()){
String sc2 = sc.nextLine().replace("<", "");
char chr = '/';
if (sc2.charAt(0) != chr){
String[] parts = sc2.split(" ");
String[] parts2 = parts[1].split("=\"");
String[] parts3 = sc2.split(">");
nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]);
ar = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < nod.getDepth(); i++){
ar.add(nod);
}
}
buildTree(ar);
}
}
void buildTree(ArrayList<DefaultMutableTreeNode> a){
model = new DefaultTreeModel (a);
tree = new JTree(model);
tree.setBackground(Color.green);
}
void showDetails(TreePath path){
if (path == null)
return;
int a = path.getPathCount()-1;
DefaultMutableTreeNode b = (DefaultMutableTreeNode) path.getPathComponent(a);
String info = ((Nod) b).getText();
JOptionPane.showMessageDialog(this, info);
}
public static void main(String[] args) throws FileNotFoundException{
if(args.length>0){
filen=args[0];
}
main = new Tree();
}
}
Nod只是一个类,它使对象具有名称、级别和文本
因此,主要的想法是,导入文件->读取它->创建它的对象->创建一个数组并在其中添加节点/对象->通过数组/节点创建树模型->通过树模型创建一棵树,如您所见->并使用扩展名运行它以获得GUI。但我在ArrayList上发现语法错误
你看到问题了吗?直接的问题是没有DefaultTreeModel构造函数接受ArrayList作为参数。见文件
我想你可能需要阅读这篇关于如何使用JTree的文章 您应该更改此if子句:
if (sc2.charAt(0) != chr){ String[] parts = sc2.split(" ");
String[] parts2 = parts[1].split("=\"");
String[] parts3 = sc2.split(">");
nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]);
// ar = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < nod.getDepth(); i++){ ar.add(nod); } }
始终在问题中发布完整的错误消息。你想让问题尽可能容易回答,不是吗?请注意,你在循环的每次迭代中创建arraylist,这是没有意义的。从一开始就创建arraylist并使用它,但不要继续重新创建。我只是想在同一个数组中添加所有对象,但我认为该循环有问题。同样,您正在重新创建arraylist,这意味着,当新的ArrayList替换旧的ArrayList时,在循环中前面添加到ArrayList的任何内容都将被抛出。再说一次,这有意义吗?还有,为什么要在创建树时首先使用ArrayList?ArrayList是线性列表,而不是树结构。为什么不创建一个JTree和一个DefaultTreeModel呢?