`
kanpiaoxue
  • 浏览: 1744768 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java中tree的应用示例:javax.swing.tree.DefaultMutableTreeNode

 
阅读更多

 

 

package org.kanpiaoxue.tree;

import org.apache.commons.collections.CollectionUtils;

import com.google.common.base.Splitter;
import com.google.common.collect.Lists;

import java.util.List;
import java.util.Queue;

import javax.swing.tree.DefaultMutableTreeNode;

/**
 * tree的示例
 *
 * @ClassName: TreeExample
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime: 2021/02/03 14:55:12
 * @Description:
 */
public class TreeExample {
    private static final String PATH_SPLIT_STRING = "/";

    /**
     *
     * DefaultMutableTreeNode 树形结构的示例。
     *
     * @throws Exception
     * @author kanpiaoxue
     * @CreateTime: 2021/02/03 14:55:12
     * @Description:
     */
    public static void main(String[] args) {

        /**
         * 示例1:构建一颗树
         * 下面的代码构建了一棵树,有7个node。如url的图片。
         * https://app.diagrams.net/?lightbox=1&highlight=0000ff&edit=_blank&layers=1&nav=1&title=Untitled%20Diagram.drawio#R5ZhNj5swEIZ%2FDcdKfC0h1023zaE9VDnsqjcvnoAjwyBjAvTX1ywmBLlNqdQWRz2BX4%2BN%2FfidQeAEu7z9KEiZfUYK3PFd2jrBe8f3Pc%2BN1KVXukHZbjeDkApGddAkHNg30KKr1ZpRqGaBEpFLVs7FBIsCEjnTiBDYzMOOyOdPLUkKhnBICDfVZ0ZlNqixv5n0PbA0G5%2FsRduhJydjsN5JlRGKzZUUPDnBTiDK4S5vd8B7eCOXYdyHn%2FReFiagkEsGdDH%2F%2BlLvX%2FmJ7atz%2BfIlOz2%2FC4ZZzoTXesN6sbIbCQisCwr9JK4TPKKQGaZYEP4JsVSip8QTSNnpsyO1RCVlMue6d5gRqAF6WrmWKqxFAjeWOzqAiBTkjTj%2FwlcZEzAHKTo1TgAnkp3n6yDaIeklboKobjTH32D68GumPYyDbhZYqMvjPWIO18TsGZiJyZlzVSh6vE3GJBxK8rbvRtWqOTxSlUP1OLK2PwRN8wxCQnubp7l%2FPSAYM1%2BXPj%2FW7WYqJKGWsqsaMmp%2FnpiJ7N6cGS50puf%2B%2BGj%2BjTVDg3NilzVDd27NIFrbmq6B7Gg3sjBcGdnm7pPZX5jM0Zq5vP1vMMdrYvYNzK925f8lkW0pmbFBDCwjFltWMb0FXzuW53K0MJe9Vb%2BAIoMztcyatr3MPbP%2BpXYje%2FD%2FGjLVnH6LvPVd%2FVwKnr4D
         */
        DefaultMutableTreeNode a = new DefaultMutableTreeNode("a", true);
        DefaultMutableTreeNode b = new DefaultMutableTreeNode("b", true);
        DefaultMutableTreeNode c = new DefaultMutableTreeNode("c", true);
        DefaultMutableTreeNode d = new DefaultMutableTreeNode("d", true);
        DefaultMutableTreeNode e = new DefaultMutableTreeNode("e", true);
        DefaultMutableTreeNode f = new DefaultMutableTreeNode("f", true);
        DefaultMutableTreeNode g = new DefaultMutableTreeNode("g", true);

        a.add(b);
        a.add(c);

        b.add(d);
        b.add(e);

        c.add(f);

        d.add(g);

        System.out.println(String.format("%s", Lists.newArrayList(g.getPath())));
        System.out.println(String.format("%s", a.getDepth()));
        System.out.println(String.format("%s", a.getLevel()));

        /**
         * 示例2:从一个存储路径构建一棵树
         * 下面的代码构建了一棵树,有18个node。如path。
         */
        String path =
                "/Users/kanpiaoxue/workspaces/test-web/src/main/java/org/kanpiaoxue/test/web/service/store/impl";

        DefaultMutableTreeNode root = buildTreeFromPath(path);

        System.out.println(String.format("-->%s", root));
        System.out.println(String.format("-->%s", root.getFirstChild()));
        System.out.println(String.format("-->%s", root.getFirstChild().getChildAt(0)));
        System.out.println(String.format("-->%s", root.getFirstChild().getChildAt(0).getChildAt(0)));
        System.out.println(String.format("-->%s", root.getDepth()));
        System.out.println(String.format("-->%s", Lists.newArrayList(root.getLastLeaf().getPath())));
        System.out.println(String.format("-->%s", Lists.newArrayList(root.getLastLeaf().getPath()).size()));

    }

    /**
     *
     * 从路径构建一棵树
     *
     * @param path
     * @return
     * @author kanpiaoxue
     * @CreateTime: 2021/02/03 14:57:42
     * @Description:
     */
    private static DefaultMutableTreeNode buildTreeFromPath(String path) {
        Queue<String> treeData = Lists.newLinkedList();
        List<String> list = Splitter.on(PATH_SPLIT_STRING).trimResults().omitEmptyStrings().splitToList(path);
        if (CollectionUtils.isNotEmpty(list)) {
            treeData.addAll(list);
        }

        DefaultMutableTreeNode root = new DefaultMutableTreeNode(PATH_SPLIT_STRING, true);
        int level = 0;

        DefaultMutableTreeNode currentNode = null;
        while (!treeData.isEmpty()) {
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(treeData.poll(), true);
            if (level != 0) {
                currentNode.add(node);
            } else {
                root.add(node);
            }
            currentNode = node;
            level++;
        }
        return root;
    }
}

 

 

分享到:
评论

相关推荐

    javax.servlet-3.0.0.v201112011016-API文档-中文版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.servlet-3.0.0.v201112011016-API文档-中英对照版.zip

    赠送jar包:javax.servlet-3.0.0.v201112011016.jar; 赠送原API文档:javax.servlet-3.0.0.v201112011016-javadoc.jar; 赠送源代码:javax.servlet-3.0.0.v201112011016-sources.jar; 赠送Maven依赖信息文件:...

    javax.annotation-api-1.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...

    javax.annotation-api-1.3.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...

    javax.websocket-api-1.1-API文档-中文版.zip

    赠送jar包:javax.websocket-api-1.1.jar; 赠送原API文档:javax.websocket-api-1.1-javadoc.jar; 赠送源代码:javax.websocket-api-1.1-sources.jar; 赠送Maven依赖信息文件:javax.websocket-api-1.1.pom; ...

    javax.activation-1.2.0-API文档-中文版.zip

    赠送jar包:javax.activation-1.2.0.jar; 赠送原API文档:javax.activation-1.2.0-javadoc.jar; 赠送源代码:javax.activation-1.2.0-sources.jar; 赠送Maven依赖信息文件:javax.activation-1.2.0.pom; 包含...

    javax.mail-1.5.6-API文档-中文版.zip

    赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...

    javax.activation-api-1.2.0-API文档-中文版.zip

    赠送jar包:javax.activation-api-1.2.0.jar; 赠送原API文档:javax.activation-api-1.2.0-javadoc.jar; 赠送源代码:javax.activation-api-1.2.0-sources.jar; 赠送Maven依赖信息文件:javax.activation-api-...

    javax.servlet-api-4.0.1-API文档-中英对照版.zip

    赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...

    javax.mail-1.6.2-API文档-中英对照版.zip

    赠送jar包:javax.mail-1.6.2.jar; 赠送原API文档:javax.mail-1.6.2-javadoc.jar; 赠送源代码:javax.mail-1.6.2-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.6.2.pom; 包含翻译后的API文档:javax.mail...

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    在Oracle 11.2.0.4中调用 javax.mail 发送邮件时可能会遇到以下错误: ORA-29532: Java call terminated by uncaught Java exception: javax.mail.MessagingException: IOException while sending message; nested ...

    jdk10+ java.lang.NoClassDefFoundError: javax/xml/ws/Service 错误

    2、由于JDK9以后,去除了javax.xml包需要引入对应的jar包 &lt;groupId&gt;javax.activation &lt;artifactId&gt;javax.activation-api &lt;version&gt;1.2.0 &lt;groupId&gt;javax.xml.bind &lt;artifactId&gt;jaxb-api &lt;version&gt;2.3.1 ...

    javax.ws.rs-api-2.0.1-API文档-中文版.zip

    赠送jar包:javax.ws.rs-api-2.0.1.jar; 赠送原API文档:javax.ws.rs-api-2.0.1-javadoc.jar; 赠送源代码:javax.ws.rs-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:javax.ws.rs-api-2.0.1.pom; 包含翻译后...

    javax.servlet-api-4.0.0-API文档-中文版.zip

    赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...

    javax.json-1.0.4-API文档-中文版.zip

    赠送jar包:javax.json-1.0.4.jar; 赠送原API文档:javax.json-1.0.4-javadoc.jar; 赠送源代码:javax.json-1.0.4-sources.jar; 赠送Maven依赖信息文件:javax.json-1.0.4.pom; 包含翻译后的API文档:javax.json...

    javax.ws.rs-api-2.0-API文档-中文版.zip

    赠送jar包:javax.ws.rs-api-2.0.jar; 赠送原API文档:javax.ws.rs-api-2.0-javadoc.jar; 赠送源代码:javax.ws.rs-api-2.0-sources.jar; 赠送Maven依赖信息文件:javax.ws.rs-api-2.0.pom; 包含翻译后的API文档...

    javax.persistence.jar

    Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....

    javax.ws.rs-api-2.0.1-API文档-中英对照版.zip

    赠送jar包:javax.ws.rs-api-2.0.1.jar; 赠送原API文档:javax.ws.rs-api-2.0.1-javadoc.jar; 赠送源代码:javax.ws.rs-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:javax.ws.rs-api-2.0.1.pom; 包含翻译后...

    java.lang.NoClassDefFoundError: javax/persistence/EntityListener

    NULL 博文链接:https://lyndon-lin.iteye.com/blog/856002

    javax.transaction-api-1.2-API文档-中英对照版.zip

    赠送jar包:javax.transaction-api-1.2.jar; 赠送原API文档:javax.transaction-api-1.2-javadoc.jar; 赠送源代码:javax.transaction-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.transaction-api-1.2....

Global site tag (gtag.js) - Google Analytics