java - 在JAVA Swing中加载csv树结构

标签 java swing csv jtree

我有一个 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);
                    }
                }
            }
        }
    });
}

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

(静态定义只是为了快速测试的原因)

最佳答案

您可以使用Map<Integer, TreeNode>

键是对象的深层索引,TreeNode 将是该索引的最后一个。 然后你就可以拿index-1作为 parent 。

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

关于java - 在JAVA Swing中加载csv树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25133037/

相关文章:

java - 如何根据java中的双引号分隔符将多个List<String>元素合并为一个

java - 如何在 Java 中比较字符串?

java - 对一个按钮使用多个 actionlistener

java - 以下代码中出现 "Number format exception/empty string"错误的原因是什么?

java - 使用 Java 解析 CSV 时管理文件列名称和位置

r - Spark Dataframe 中的重复列

java - 关闭套接字也会关闭/刷新输入/输出流

java - 如何在 apache karaf 上启用单点登录和 session 登录?

java - 仅当安装了证书时才访问页面

java - JFrame/JDesktop 未接收到关键焦点