JTree的基本使用

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;

public class tree {
JFrame jFrame=new JFrame();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");

DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");


    JTree jTree=new JTree(root);


    private  void init(){
        root.add(r1);
        root.add(r2);
        r1.add(o1);
        r1.add(o2);


        r2.add(o4);
        r2.add(o5);

        jFrame.add(jTree);
        jFrame.pack();
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
    }
    public static void main(String[] args) {
        new tree().init();
    }
}


getNextSibling():返回当前结点的下一个兄弟结点
getParent():得到该结点的父亲结点
isLeaf():判断该结点是不是叶子节点
isRoot():判断该结点是不是根节点
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

public class tree1 {
    JFrame jFrame=new JFrame();
    DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
    DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
    DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");

    DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
    DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");

    DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
    DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");


    JTree jTree=new JTree(root);


    private  void init(){
        root.add(r1);
        root.add(r2);
        r1.add(o1);
        r1.add(o2);

        r2.add(o4);
        r2.add(o5);
        //消除结点之间的连线
//        jTree.putClientProperty("JTree.lineStyle","None");
        //设置只有水平连线
//        jTree.putClientProperty("JTree.lineStyle","Horizontal");


//返回当前结点的下一个兄弟结点
        DefaultMutableTreeNode nextSibling = r1.getNextSibling();
        System.out.println(nextSibling);//江苏
//得到该结点的父亲结点
        TreeNode parent = r1.getParent();
        System.out.println(parent);//中国
//判断该结点是不是叶子节点
        System.out.println(r1.isLeaf());
        System.out.println(o1.isLeaf());
        System.out.println("---------------------------------------");
//判断该结点是不是根节点
        System.out.println(root.isRoot());
        System.out.println(r1.isRoot());

        jFrame.add(jTree);
        jFrame.pack();
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
    }
    public static void main(String[] args) {
        new tree1().init();
    }
}


 加入四个按钮,使得JTree可以被编辑

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//编辑jtree
public class tree2 {
    JFrame jFrame = new JFrame();
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("中国");
    DefaultMutableTreeNode r1 = new DefaultMutableTreeNode("安徽");
    DefaultMutableTreeNode r2 = new DefaultMutableTreeNode("江苏");
    DefaultMutableTreeNode o1 = new DefaultMutableTreeNode("合肥");
    DefaultMutableTreeNode o2 = new DefaultMutableTreeNode("芜湖");

    DefaultMutableTreeNode o4 = new DefaultMutableTreeNode("南京");
    DefaultMutableTreeNode o5 = new DefaultMutableTreeNode("苏州");


    JTree jTree = new JTree(root);

    //按钮
    JButton addSibling = new JButton("添加兄弟结点");
    JButton addSonNode = new JButton("添加子结点");
    JButton deleteNode = new JButton("删除结点");
    JButton editNode = new JButton("编辑当前结点");

    JPanel jPanel = new JPanel();




    private void init() {
        root.add(r1);
        root.add(r2);
        r1.add(o1);
        r1.add(o2);


        r2.add(o4);
        r2.add(o5);

        jFrame.add(jTree);
        jFrame.pack();
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
//使树可以编辑
        jTree.setEditable(true);
        DefaultTreeModel selectionModel = (DefaultTreeModel) jTree.getModel();

        //添加兄弟结点
        addSibling.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1.得到当前选中的结点---强转类型
                DefaultMutableTreeNode lastSelectedPathComponent = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
                if (lastSelectedPathComponent == null) {
                    return;
                }
                //2.得到选中结点的父结点
                if (lastSelectedPathComponent == null) {
                    return;
                }
                DefaultMutableTreeNode parent = (DefaultMutableTreeNode) lastSelectedPathComponent.getParent();

                //3.创建新结点
                DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新结点");

                //4.通过父结点添加新结点
                int index = parent.getIndex(lastSelectedPathComponent);
                selectionModel.insertNodeInto(newNode, parent, index);
                //5.显示新结点
                //得到新结点的路径
                TreeNode[] pathToRoot = selectionModel.getPathToRoot(newNode);
                TreePath treePath = new TreePath(pathToRoot);
                jTree.scrollPathToVisible(treePath);
                //6.重绘树
                jTree.updateUI();
            }
        });
        //添加子结点
        addSonNode.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1.得到当前选中 的结点
                DefaultMutableTreeNode lastSelectedPathComponent = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
                //2.新建结点
                DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新结点");
                //3.将新结点添加到当前选中的结点下
                lastSelectedPathComponent.add(newNode);
                //4.显示新结点
                TreeNode[] pathToRoot = selectionModel.getPathToRoot(newNode);
                TreePath treePath = new TreePath(pathToRoot);
                jTree.scrollPathToVisible(treePath);
                //5.重绘树的UI
                jTree.updateUI();


            }
        });
        //删除结点
        deleteNode.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                DefaultMutableTreeNode lastSelectedPathComponent = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
                if (lastSelectedPathComponent != null && lastSelectedPathComponent.getParent() != null) {
                    lastSelectedPathComponent.removeFromParent();
                    jTree.updateUI();
                }
            }
        });
//编辑结点
        editNode.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //得到选中结点的路径
                TreePath selectionPath = jTree.getSelectionPath();
                if (selectionPath != null) {
                    jTree.startEditingAtPath(selectionPath);
                }

            }
        });




        jPanel.add(addSibling);
        jPanel.add(addSonNode);
        jPanel.add(deleteNode);
        jPanel.add(editNode);
        jFrame.add(jPanel, BorderLayout.SOUTH);

    }

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


通过点击结点,在右边文本域中输出点击内容的路径

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;

public class tree3 {
    JFrame jFrame=new JFrame();
    DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
    DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
    DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
    DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
    DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");

    DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
    DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");


    JTree jTree=new JTree(root);
JTextArea jTextArea=new JTextArea(5,10);

    private  void init(){
        root.add(r1);
        root.add(r2);
        r1.add(o1);
        r1.add(o2);


        r2.add(o4);
        r2.add(o5);

        TreeSelectionModel selectionModel1 = jTree.getSelectionModel();
        selectionModel1.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置为单选

        selectionModel1.addTreeSelectionListener(new TreeSelectionListener() {
            @Override
            public void valueChanged(TreeSelectionEvent e) {
                TreePath newLeadSelectionPath = e.getNewLeadSelectionPath();
                jTextArea.append(newLeadSelectionPath.toString()+"\n");

            }
        });

        jFrame.add(jTree);
        jFrame.pack();
        jFrame.add(jTextArea, BorderLayout.EAST);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);

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

 


import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;

public class tree4 {





JFrame jFrame=new JFrame();
    DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
    DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
    DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
    DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
    DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");

    DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
    DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");


    JTree jTree=new JTree(root);


    private  void init(){
        root.add(r1);
        root.add(r2);
        r1.add(o1);
        r1.add(o2);


        r2.add(o4);
        r2.add(o5);

        //设置树的样式
        DefaultTreeCellRenderer defaultTreeCellRenderer=new DefaultTreeCellRenderer();
        //setBackgroundNonSelectioncolor(Color newColor):设置用于非选定节点的背景颜色
        defaultTreeCellRenderer.setBackgroundNonSelectionColor(new Color(220,220,220));

        //setBackgroundSelectioncolor(Color newColor):设置用于选定节点的背景颜色

        defaultTreeCellRenderer.setBackgroundSelectionColor(new Color(140,140,140));

         //setBorderSelectionColor:设置选中结点的边框颜色
        defaultTreeCellRenderer.setBorderSelectionColor(Color.BLACK);

         //setclosedIcon(Icon newIcon):设置处于折叠状态下非叶子节点的图标。
        defaultTreeCellRenderer.setClosedIcon(new ImageIcon("D:\\imgs\\ClosedDocument.png"));

        //    setFont ( Font font) :设置节点文本的字体。
        defaultTreeCellRenderer.setFont(new Font("StSong",Font.BOLD,16));

        //setOpenIcon(Icon newIcon):设置处于展开状态下非叶子节点的图标。
        defaultTreeCellRenderer.setOpenIcon(new ImageIcon("D:\\imgs\\OpenedDocument.png"));

         //setLeaflcon( Icon newIcon):设置叶子节点的图标。
        defaultTreeCellRenderer.setLeafIcon(new ImageIcon("D:\\imgs\\leaf.png"));

        //    setTextNonSelectioncolor(Color newColor):设置绘制非选中状态下节点文本的颜色
        defaultTreeCellRenderer.setTextNonSelectionColor(new Color(255,0,0));

//    setTextselectioncolor(color newColor):设置绘制选中状态下节点文本的颜色
        defaultTreeCellRenderer.setTextSelectionColor(new Color(0,0,255));
        jFrame.add(jTree);
        jFrame.pack();

//设置结点绘制器
jTree.setCellRenderer(defaultTreeCellRenderer);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
    }
    public static void main(String[] args) {
        new tree4().init();
    }
}

被选中的文字变成蓝色,默认为红色 

 

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FullBNT是一个用于贝叶斯网络建模和推理的MATLAB工具箱。下面是使用FullBNT的基本步骤: 1. 安装FullBNT:从FullBNT的官方网站 http://www.mathworks.com/matlabcentral/fileexchange/5931-bnt-bayesian-network-toolbox 下载FullBNT的压缩包,解压缩之后将FullBNT文件夹添加到MATLAB的搜索路径中。 2. 创建贝叶斯网络:使用bnet = mk_bnet()函数创建一个空的贝叶斯网络对象。然后使用add_node函数添加节点,并使用set_node_size函数设置每个节点的状态数。 3. 定义条件概率表:使用bnet.CPD{i} = ...语句定义每个节点的条件概率表。例如,对于一个具有两个父节点的节点i,可以使用CPT = reshape([0.2 0.8 0.6 0.4 0.5 0.5 0.7 0.3],[2 2 2])来定义该节点的条件概率表。 4. 学习贝叶斯网络:使用bnet = learn_params(bnet,data)函数来从数据中学习贝叶斯网络的参数。其中,data是一个N×D的矩阵,其中N是样本数,D是变量数。 5. 推理:使用engine = jtree_inf_engine(bnet)函数创建一个推理引擎,并使用evidence = cell(1,N)和evidence{i} = k来设置证据节点i的取值为k。然后使用[engine, loglik] = enter_evidence(engine, evidence)函数进行推理,并使用marg = marginal_nodes(engine,i)函数获取节点i的边缘概率分布。 6. 可视化:使用view(bnet)函数可以可视化贝叶斯网络。使用draw_layout(engine.dag)函数可以可视化推理引擎的有向无环图。 以上是FullBNT的基本使用步骤,更多详细信息可以参考FullBNT的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值