java 实现树形结构

package tree;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;

public class treenode extends JFrame implements TreeSelectionListener{

    JLabel jl;
    public treenode()
     {
        super("树形结构");

        //创建根节点和子节点
        DefaultMutableTreeNode root=new DefaultMutableTreeNode("文本编辑器");

        DefaultMutableTreeNode node1=new DefaultMutableTreeNode("文件");
        DefaultMutableTreeNode node2=new DefaultMutableTreeNode("编辑");

        //利用根节点创建treemodel
        DefaultTreeModel treemodel=new DefaultTreeModel(root);
        //插入子节点
        treemodel.insertNodeInto(node1, root, root.getChildCount());
        treemodel.insertNodeInto(node2, root, root.getChildCount());

        //创建node1的子节点并插入
        DefaultMutableTreeNode leafnode=new DefaultMutableTreeNode("打开");
        treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());

        leafnode=new DefaultMutableTreeNode("保存");
        treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());

        leafnode=new DefaultMutableTreeNode("另存为");
        treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());

        leafnode=new DefaultMutableTreeNode("关闭");
        treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());

        //创建node2的子节点并插入
        leafnode=new DefaultMutableTreeNode("剪切");
        treemodel.insertNodeInto(leafnode, node2, node2.getChildCount());

        leafnode=new DefaultMutableTreeNode("复制");
        treemodel.insertNodeInto(leafnode, node2, node2.getChildCount());

        leafnode=new DefaultMutableTreeNode("粘贴");
        treemodel.insertNodeInto(leafnode, node2, node2.getChildCount());

        //创建树对象
        JTree tree =new JTree(treemodel);

        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.addTreeSelectionListener(this);
        tree.setRowHeight(20);

        //创建节点绘制对象
        DefaultTreeCellRenderer cell=(DefaultTreeCellRenderer)tree.getCellRenderer();

        //设置字体
        cell.setFont(new Font("Serif",Font.PLAIN,14));
        cell.setBackgroundNonSelectionColor(Color.white);
        cell.setBackgroundSelectionColor(Color.LIGHT_GRAY);
        cell.setForeground(Color.red);

        cell.setIcon(new ImageIcon("/image/folder.jpg"));

        //设置选中和不选中时文字的变化颜色
        cell.setTextNonSelectionColor(Color.black);
        cell.setTextNonSelectionColor(Color.black);

        this.add(new JScrollPane(tree));

         jl=new JLabel("你当前选择的节点为:",JLabel.CENTER);
        jl.setFont(new Font("Serif",Font.PLAIN,14));
        this.add(jl,BorderLayout.SOUTH);
        this.setSize(400, 400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        treenode t=new treenode();
    }

    @Override
    public void valueChanged(TreeSelectionEvent e) {
        // TODO Auto-generated method stub

        JTree tree=(JTree)e.getSource();

        //获取当前选中的节点
        DefaultMutableTreeNode selectnode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
        String nodename=selectnode.toString();

        jl.setText("您当前选择的节点为:"+nodename);

    }

}
时间: 2024-12-28 02:06:53

java 实现树形结构的相关文章

Java创建树形结构算法实例

在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBean 1 2 3 import java.io.Serializable; 4 import java.util.ArrayList; 5 import java.util.Collections; 6 import java.util.Comparator; 7 import java.util.

java 处理树形结构工具类

import com.alibaba.druid.util.StringUtils; import com.ywb.pms.vo.BaseTreeNode; import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; import jav

个人常用工具类:JAVA树形结构工具类01

JAVA树形结构工具类 BaseTreeObj.java /** * 基层树形结构实体类 * 必备属性:id,parentId,childsList */ @Data public class BaseTreeObj implements Serializable { private static final long serialVersionUID = 1L; private String id; private String parentId; private String name; p

java构建树形节点优化

引言:java中构建树形节点时,数据量小的话,可以随便些 ,不影响,但是当数据量大了以后,一棵大大的树,要半天才出来,所以就想着优化一下. 树形节点数据构建: package me.zhengjie; import ch.qos.logback.classic.joran.action.RootLoggerAction; import com.alibaba.fastjson.JSON; import lombok.AllArgsConstructor; import lombok.Data;

解析java树形结构

思路一: 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父节点 ) b.表数据: insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0); insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1); insert into tb_

java 树形结构工具类

   好久就想写博客了,苦苦因为没时间...没关系.从现在开始,每天我都会努力抽出点时间来进行做一次总结.把我认为在项目需求中认为很有用的东西,展示给大家,希望大家一起学习,一起进步.第一次做总结,写的不好的,提出来一起学习,谢谢.    分析:   在业务需求总,我们总会碰到一些业务.比如:对上下级的用户关系进行遍历,对资源权限进行遍历...等等.这些业务非常常见.在同一个项目中,他的代码遍历都是类似的,为了更高效的复用代码,我们有必要进行深成次的封转.下面是我花了一点时间进行封装,有需要直接

java 把DataTable数据类型转换为树形结构(多叉树)

问题分析:一个关系数据库的表,如图所示: 可以看到后面四个字段:Country,Province,City,Street 具有逻辑上的从属结构,现在要把这种数据搞成一个树形结构,如图所示: 不是原来的数据转换而成的,大致就是这个意思,可以想象成,dataTable里面相同的数据进行单元格合并,然后找到所有的从根到叶子节点的路径,就算完成任务.JS里面似乎有很多插件可以实现,但Java中我暂时还没找到,没办法只能自己写了.从结构上看,应该是一个多叉多级树形结构,所以在转换的时候必须具备一定的灵活性

Java递归算法构造JSON树形结构

1.前言 最近项目中有一个需求,数据库中的菜单表是一个常见的id-pid结构,需要把它构建成树形的JSON格式发送给第三方,写出来之后感觉也是很简单的,核心代码只有5行,重要的是思路要明确,这里把源码分享给大家. 工程里面使用了json-lib.jar这个包,作用是将List序列化成JSON. 2.源码 package com.agileai.esb.smc.domain; import java.util.*; import net.sf.json.JSONArray; public clas

个人常用工具类:JAVA树形结构工具类02

JAVA树形结构工具类02 TreeNode import java.util.ArrayList; import java.util.List; /** * Created by Ace on 2017/6/12. */ public class TreeNode { protected int id; protected int parentId; List<TreeNode> children = new ArrayList<TreeNode>(); public List&