当前位置: 首页 > news >正文

JTree/DefaultMutableTreeNode 树形结构

  JTree/DefaultMutableTreeNode  2008-11-04 19:26:08

分类:

转自http://blog.chinaunix.net/uid-11472000-id-281856.html

 

//a simple tree
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class Test
{
    public static void main(String []args)
    {
        JFrame treeFrame=new TreeFrame();
        treeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        treeFrame.setVisible(true);
}
    }
class TreeFrame extends JFrame
{
    private static final int W=300;private static final int H=200;
    private JButton addBtn,delBtn;
    private DefaultTreeModel model;
    public TreeFrame()
    {
        setTitle("Tree");
        setSize(W,H);
        //创建树的数据模型
        //根结点
        DefaultMutableTreeNode root=new DefaultMutableTreeNode("山东科技大学");
        DefaultMutableTreeNode xinxi=new DefaultMutableTreeNode("信息工程系");
        //子结点
        root.add(xinxi);
        DefaultMutableTreeNode jsj=new DefaultMutableTreeNode("计算机06-1");
        xinxi.add(jsj);
        DefaultMutableTreeNode jingguan=new DefaultMutableTreeNode("经管系");
        root.add(jingguan);
        DefaultMutableTreeNode kuaiji=new DefaultMutableTreeNode("会计06-1");
        jingguan.add(kuaiji);
        //以树数据模型为参数创建一棵树
        model=new DefaultTreeModel(root);
        final JTree tree=new JTree(model);
        tree.setShowsRootHandles(true);
        tree.setRootVisible(false);
        tree.setEditable(true);
        //tree.putClientProperty("JTree.lineStyle", "None");
        this.getContentPane().add(new JScrollPane(tree));
        addBtn=new JButton("添加");
        addBtn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                DefaultMutableTreeNode select=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                if(select==null) return;
                DefaultMutableTreeNode parent=(DefaultMutableTreeNode)select.getParent();
                if(parent==null) return;
                DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("NewNode");
                int selectedIndex=parent.getIndex(select);
                model.insertNodeInto(newNode,parent,selectedIndex+1);
                //展开路径
                TreeNode[] treeNode=model.getPathToRoot(newNode);
                TreePath treePath=new TreePath(treeNode);
                tree.scrollPathToVisible(treePath);
            }    
        });
        this.getContentPane().add(addBtn,BorderLayout.WEST);
        delBtn=new JButton("删除");
        this.getContentPane().add(delBtn,BorderLayout.EAST);
        delBtn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                DefaultMutableTreeNode select=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                if(select!=null )
                    model.removeNodeFromParent(select);
            }
        }
        );
    }
}

转载于:https://www.cnblogs.com/woniuzhongdetou/p/3639380.html

相关文章:

  • 各大银行的收发标准
  • CSS 元素透明
  • 【转】网站布局--瀑布流式布局
  • 使用Python实现Hadoop MapReduce程序
  • centos svn快速搭建
  • 一个IO的传奇一生(8) -- elevator子系统
  • linux:shell脚本格式
  • CSS自定义select下拉选择框(不用其他标签模拟)
  • 关于一级指针和二级指针作为参数的探究
  • 2014年4月15日星期二java学习历程
  • Amazon Workspace DaaS服务快速导读
  • http 错误
  • Unity3d 屏幕截图。并保存。iOS
  • quota .1
  • 34、最简单的mvc框架tiny,总结分析V2版思路
  • 【React系列】如何构建React应用程序
  • 【技术性】Search知识
  • css的样式优先级
  • extract-text-webpack-plugin用法
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Spring Boot MyBatis配置多种数据库
  • Terraform入门 - 1. 安装Terraform
  • 近期前端发展计划
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 提醒我喝水chrome插件开发指南
  • 用Canvas画一棵二叉树
  • 字符串匹配基础上
  • Hibernate主键生成策略及选择
  • ionic异常记录
  • ​业务双活的数据切换思路设计(下)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (zt)最盛行的警世狂言(爆笑)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (简单) HDU 2612 Find a way,BFS。
  • (论文阅读11/100)Fast R-CNN
  • *1 计算机基础和操作系统基础及几大协议
  • *p++,*(p++),*++p,(*p)++区别?
  • .bat批处理(六):替换字符串中匹配的子串
  • .libPaths()设置包加载目录
  • .NET Core 成都线下面基会拉开序幕
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net core使用ef 6
  • .NET 发展历程
  • .NET 反射的使用
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • @JsonFormat与@DateTimeFormat注解的使用
  • @Responsebody与@RequestBody
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [Asp.net mvc]国际化
  • [Deep Learning] 神经网络基础
  • [HNOI2010]BUS 公交线路