在JAVA Swing中加载csv树结构

时间:2014-08-05 07:08:49

标签: java swing csv jtree

我有一个以下列方式保存树结构的csv:

Root;;;;;;;
;Cat1;;;;;;
;;Sub1;;;;;
;;Sub2;;;;;
;;Sub3;;;;;
;Cat2;;;;;;
;;Sub4;;;;;
;;;SSb1;;;;

我想在JAVA中加载此结构并将其显示在JTree中。

我使用opencsv来解析strcuture并动态创建一个Tree。这就是它的样子:

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);
                    }
                }
            }
        }
    });
}

当然这不起作用,因为指针的行为不正确(一个指针太少)。我认为一个解决方案是创建一个包含每层中所有“最后”父项的数组(例如,如果解析器位于Sub4,则数组将是[root,Cat2]。) 这个问题有更聪明的解决方案吗?

(静态定义仅用于快速测试原因)

1 个答案:

答案 0 :(得分:1)

您可以使用Map<Integer, TreeNode>

密钥是对象的深层索引,TreeNode将是该索引的最后一个。 然后,您可以将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