import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
 
class Branch {
    DefaultMutableTreeNode r;
 
    // DefaultMutableTreeNode是树的数据结构中的通用节点,节点也可以有多个子节点。
    public Branch(String[] data) {
        r = new DefaultMutableTreeNode(data[0]);
        for (int i = 1; i < data.length; i++)
            r.add(new DefaultMutableTreeNode(data[i]));
        // 给节点r添加多个子节点
    }
 
    public DefaultMutableTreeNode node() {// 返回节点
        return r;
    }
}
 
public class Trees extends JPanel {
    String[][] data = { { "Colors""Red""Blue""Green" },
            "Flavors""Tart""Sweet""Bland" },
            "Length""Short""Medium""Long" },
            "Volume""High""Medium""Low" },
            "Temperature""High""Medium""Low" },
            "Intensity""High""Medium""Low" } };
    static int i = 0// I用于统计按钮点击的次数
    DefaultMutableTreeNode root, child, chosen;
    JTree tree;
    DefaultTreeModel model;
 
    public Trees() {
        setLayout(new BorderLayout());
        root = new DefaultMutableTreeNode("root");
        // 根节点进行初始化
        tree = new JTree(root);
        // 树进行初始化,其数据来源是root对象
        add(new JScrollPane(tree));
        // 把滚动面板添加到Trees中
        model = (DefaultTreeModel) tree.getModel();
        // 获得数据对象DefaultTreeModel
        JButton test = new JButton("Press me");
        // 按钮test进行初始化
        test.addActionListener(new ActionListener() {
            // 按钮test注册监听器
            public void actionPerformed(ActionEvent e) {
                if (i < data.length) {
                    // 按钮test点击的次数小于data的长度
                    child = new Branch(data[i++]).node();
                    // 生成子节点
                    chosen = (DefaultMutableTreeNode)
                    // 选择child的父节点
                    tree.getLastSelectedPathComponent();
                    if (chosen == null)
                        chosen = root;
                    model.insertNodeInto(child, chosen, 0);
                    // 把child添加到chosen
                }
            }
        });
        test.setBackground(Color.blue);
        // 按钮test设置背景色为蓝色
        test.setForeground(Color.white);
        // 按钮test设置前景色为白色
        JPanel p = new JPanel();
        // 面板p初始化
        p.add(test);
        // 把按钮添加到面板p中
        add(p, BorderLayout.SOUTH);
        // 把面板p添加到Trees中
    }
 
    public static void main(String args[]) {
        JFrame jf = new JFrame("JTree demo");
 
        jf.getContentPane().add(new Trees(), BorderLayout.CENTER);
        // 把Trees对象添加到JFrame对象的中央
        jf.setSize(200500);
        jf.setVisible(true);
    }
}

java树 JTree实例(可动态添加节点)相关推荐

  1. Dojo学习13 dijit.Tree 动态添加节点之一

    为什么80%的码农都做不了架构师?>>>    13. dijit.Tree 动态添加节点之一 对dijit.Tree研究了很久,源代码也看了好多遍了.对于fx这个类的研究还需要更深 ...

  2. treeview托拽和动态添加节点以及treeview和xml的交互的实现

    前两天被winform的treeview搞晕了,现在终于有时间了,把自己用到的知识简单的写出来.供和我一样初用winform 的treeview的同志批评指正.         一.treeview的 ...

  3. Jquery实现无限级树状结构并动态添加增删改等编辑功能

    点击打开链接 源:http://www.56gee.com/Detail/2012/04/11/8AEB74E423/ <!DOCTYPE html PUBLIC "-//W3C//D ...

  4. zTree动态添加节点

    在zTree上面动态添加节点要用到函数: addNodes(parentNode, [index], newNodes, isSilent) 关于这个函数的详细说明如下: 示例代码如下: //1.获取 ...

  5. Ambari动态添加节点

    Ambari添加节点 背景 措施 操作步骤 ambari系列: Ambari 服务器节点动态换盘操作 Ambari的Metrics Collector启动后自动关闭的解决 Ambari动态添加节点 背 ...

  6. java 动态加载控件_JS动态添加节点后渲染为EasyUI控件,EasyUI动态渲染解析解决方案...

    这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...

  7. python、java实现二叉树,细说二叉树添加节点、深度优先(先序、中序、后续)遍历 、广度优先 遍历算法...

    数据结构可以说是编程的内功心法,掌握好数据结构真的非常重要.目前基本上流行的数据结构都是c和c++版本的,我最近在学习python,尝试着用python实现了二叉树的基本操作.写下一篇博文,总结一下, ...

  8. 安卓java代码标签_Android实现动态添加标签及其点击事件

    在做Android开发的时候,会遇到动态添加标签让用户选择的功能,所以自己写了个例子,运行效果图如下. 标签可以左右滑动进行选择,点击的时候,会弹出toast提示选择或者取消选择了哪个标签.通过动态添 ...

  9. Web前端文档阅读笔记-vis.js动态添加节点(vue cli环境)

    这里主要是针对vis的network图进行节点动态添加 图用的是vis.js,表单使用的是element-ui 程序运行截图如下: 添加一个节点: 这里是不需要刷新页面就能添加的. 程序结构如下: 关 ...

最新文章

  1. js的eval函数解析后台返回的json数据时为什加上圆括号eval((+data+)),而HTML页面定义的数据不用...
  2. 一分钟详解鱼眼镜头标定基本原理及实现
  3. 052_CSS3 appearance属性
  4. curl封装php,PHP封装curl的简单方法
  5. Fragment Summary 2/2
  6. okhttputils java_Java OkHttpUtils.post方法代码示例
  7. android 键盘遮盖输入框_Android软键盘挡住输入框的终极解决方案
  8. Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell
  9. javascript 西瓜一期 09 字符与编码的对应关系 理解
  10. python库下载安装报错_python安装第三方库报错visual c++ 14.0 is required
  11. vue 实现文本的拖拽_Vue-实现简单拖拽(自定义属性)
  12. 《圈圈教你玩USB》之 USB鼠标 描述符
  13. 三菱plc pwm指令_三菱PLC初学者只要解决这50个问题,那你就觉得很容易上手?
  14. 免费中文版Adobe Acrobat Reader DC PDF文件阅读软件
  15. 在局域网内怎样使两台计算机共享,怎么使两台电脑共享数据?
  16. autojs之启动页
  17. Linux之setenv()/getenv()设置/获取环境变量
  18. PYNQ-overlay
  19. 倍福PLC基于NT_Shutdown实现控制器自动关机重启
  20. 电机调速设计并用matlab仿真,终稿毕业论文设计_基于PWM控制的直流电动机调速系统设计及MATLAB仿真.doc最终版(备份存档)...

热门文章

  1. check的用法java,Java ValueRange checkValidValue()用法及代码示例
  2. 高考计算机如何检索投档,2021年高考平行志愿如何投档?
  3. 给数组倒序_22个超详细的 JS 数组方法
  4. css设定div固定比例,响应式网页中,如何只用CSS实现div的高和宽保持固定比例
  5. 官宣弃用Java 8!Kafka 3.0.0 新功能get
  6. K8S面试大通关!赶紧收藏!
  7. 皮一皮:谁没有年少轻狂过...
  8. 用了10年的微信表情,它居然偷偷把烟给戒了...
  9. ​赠书:面向对象的两大迷思,再给你们解答一次
  10. 每日一皮:一直认为写代码的自己有点小帅