在JavaSwing中加载csv树结构

在JavaSwing中加载csv树结构,java,swing,csv,jtree,Java,Swing,Csv,Jtree,我有一个csv,它以以下方式保存树结构: Root;;;;;;; ;Cat1;;;;;; ;;Sub1;;;;; ;;Sub2;;;;; ;;Sub3;;;;; ;Cat2;;;;;; ;;Sub4;;;;; ;;;SSb1;;;; 我想用JAVA加载这个结构并在JTree中显示它 我使用opencsv解析结构并动态创建树。这就是它看起来的样子: public static DefaultMutableTreeNode root = null; public static DefaultMut

我有一个csv,它以以下方式保存树结构:

Root;;;;;;;
;Cat1;;;;;;
;;Sub1;;;;;
;;Sub2;;;;;
;;Sub3;;;;;
;Cat2;;;;;;
;;Sub4;;;;;
;;;SSb1;;;;
我想用JAVA加载这个结构并在JTree中显示它

我使用opencsv解析结构并动态创建树。这就是它看起来的样子:

public static DefaultMutableTreeNode root = null;
public static DefaultMutableTreeNode pointer = null;
public static DefaultMutableTreeNode temp = null;
public static int index = 0;

public static void main(String[] args) {
    CSV csv = CSV
            .separator(';')  // delimiter of fields
            .quote('"')      // quote character
            .create();       // new instance is immutable



    csv.read("MyCSV.csv", new CSVReadProc() {
        public void procRow(int rowIndex, String... values) {
            if (root == null) {
                root = new DefaultMutableTreeNode(values[0]);
                pointer = root;
                index = 1;
            } else {
                for(int i = 0; i<values.length;i++) {

                    if (!values[i].isEmpty() && (i+1)<values.length) {
                        if (index == i) {

                        } else if (index < i) {
                            pointer = temp;
                            index = i;
                        }
                        temp = new DefaultMutableTreeNode(values[i]);
                        pointer.add(temp);
                    }
                }
            }
        }
    });
}
public静态DefaultMutableTreeNode root=null;
公共静态DefaultMutableTreeNode指针=null;
公共静态DefaultMutableTreeNode临时值=null;
公共静态int索引=0;
公共静态void main(字符串[]args){
CSV=CSV
.separator(“;”)//字段的分隔符
.quote(“”)//引号字符
.create();//新实例是不可变的
读取(“MyCSV.csv”,新的CSVReadProc(){
public void procRow(整数行索引、字符串…值){
if(root==null){
root=新的DefaultMutableTreeNode(值[0]);
指针=根;
指数=1;
}否则{
对于(int i=0;i您可以使用
Map

键将是对象的深层索引,树节点将是该索引的最后一个。 然后您可以将
index-1
作为父级

Root;;;;;;; --> [{1,Root}] i=1
;Cat1;;;;;; --> [{1,Root},{2,Cat1}] --> i=2 --> Parent : Root
;;Sub1;;;;; --> [{1,Root},{2,Cat1},{3,Sub1}] --> i=3 --> Parent : Cat1
;;Sub2;;;;; --> [{1,Root},{2,Cat1},{3,Sub2}] --> i=3 --> Parent : Cat1
;;Sub3;;;;; --> [{1,Root},{2,Cat1},{3,Sub3}] --> i=3 --> Parent : Cat1
;Cat2;;;;;; --> [{1,Root},{2,Cat2},{3,Sub2}] --> i=2 --> Parent : Root
;;Sub4;;;;; --> [{1,Root},{2,Cat2},{3,Sub4}] --> i=3 --> Parent : Cat2
;;;SSb1;;;; --> [{1,Root},{2,Cat2},{3,Sub4},{4,SSb1}] --> i=4 --> Parent : Sub4

哇,这真是一个很好的解决方案!非常感谢!顺便说一句:如果地图中有更多具有相同键的对象,HashMap只接受“最新”的对象,这真是一个很酷的功能。