Java 树和数组

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

我在建立一棵树并运行它时遇到了一些问题,结果如下图所示

所以我应该通过一个.txt文件创建一个包含根和子元素的树

这是代码,我将在下面给出一个简短的解释

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呢?