调用DefaultTreeModel数据模型,有关增删改查方法实现结点增删改查,然后重绘

package itheima011;

import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.nio.file.Path;


public class JTreeDemo2 {
    public static void main(String[] args) {
        new JTreeDemo2().init();
    }

    JFrame jf=new JFrame("JTree简单演示");
    DefaultMutableTreeNode root  = new DefaultMutableTreeNode("中国");

    DefaultMutableTreeNode hean  = new DefaultMutableTreeNode("四川");
    DefaultMutableTreeNode hean2  = new DefaultMutableTreeNode("南充");
    DefaultMutableTreeNode hean3  = new DefaultMutableTreeNode("泸州");
    DefaultMutableTreeNode hean4  = new DefaultMutableTreeNode("安阳");
    DefaultMutableTreeNode hean5  = new DefaultMutableTreeNode("林州");
    DefaultMutableTreeNode hean6  = new DefaultMutableTreeNode("河南");
    DefaultMutableTreeNode hean7  = new DefaultMutableTreeNode("邯郸");

    JButton addsibling=new JButton("添加兄弟结点");
    JButton addChlid=new JButton("添加子结点");
    JButton delete=new JButton("删除当前结点");
    JButton edit=new JButton("修改结点");


    private void init() {



        root.add(hean);
        root.add(hean6);

        hean.add(hean2);
        hean.add(hean3);

        hean6.add(hean4);
        hean6.add(hean5);
        hean6.add(hean7);

        JTree tree=new JTree(root);

//创建编辑树
        jf.add(tree);
        tree.setEditable(true);
        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();

        addsibling.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //添加兄弟结点
                //获取当前选中节点
                DefaultMutableTreeNode selectednode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
                if(selectednode==null){
                    return;
                }
                //获取当前结点的父结点
                DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selectednode.getParent();
                if(parentNode==null){
                    return;
                }
                //创建新结点

                DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("新结点");
                //通过父节点添加
                int index = parentNode.getIndex(selectednode);
                model.insertNodeInto(newNode,parentNode,index);
//
                //显示新结点
                TreeNode[] pathToRoot = model.getPathToRoot(newNode);
                TreePath path = (TreePath) new TreePath(pathToRoot);
                tree.scrollPathToVisible(path);
                //重绘
                tree.updateUI();
            }
        });
        addChlid.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //添加子节点

                //获取当前选中结点
                DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
                if(selectedNode==null){
                    return;
                }
                //创建新结点
                DefaultMutableTreeNode newNode =new DefaultMutableTreeNode("新结点");

                //添加子节点
                selectedNode.add(newNode);
                //显示到当前结点
                TreeNode[] pathToRoot = model.getPathToRoot(newNode);
                TreePath path = new TreePath(pathToRoot);
                tree.scrollPathToVisible(path);
                //重绘
                tree.updateUI();
            }
        });

        delete.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
                if(selectedNode!=null || selectedNode.getParent()!=null){
                    model.removeNodeFromParent(selectedNode);
                }
            }
        });
        edit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                TreePath selectionPath = tree.getSelectionPath();
                if(selectionPath!=null){
                    tree.startEditingAtPath(selectionPath);
                }


            }
        });
        jf.add(new JScrollPane(tree));
        JPanel jPanel=new JPanel();
        jPanel.add(addsibling);
        jPanel.add(addChlid);
        jPanel.add(delete);
        jPanel.add(edit);

        jf.add(jPanel, BorderLayout.SOUTH);

        jf.pack();
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

 

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值