• [Swing]树形结构的实现


    一般步骤:

    1、建立根节点

    private DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");

    2、建立树形模型

    private DefaultTreeModel treeModel = new DefaultTreeModel(root);

    3、建立树

    private JTree tree = new JTree(treeModel);

    4、向树内添加节点

    DefaultMutableTreeNode node = new DefaultMutableTreeNode("一级节点");
    DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("二级节点");
    
    /*
    方法:insertNodeInto(DefaultMutableTreeNode child, DefaultMutableTreeNode parent, int index)
    形参:child  所要插入的节点
    形参:parent 插入节点的上级节点
    形参: index  插入节点在父节点下的位置
    */
    treeModel.insertNodeInto(node, root, root.getChildCount());
    treeModel.insertNodeInto(node2, node, node.getChildCount());

    5、添加节点监听器

    tree.addTreeSelectionListener(new TreeSelectionListener(){
           public void valueChanged(TreeSelectionEvent e){
               //监听器操作代码
           }
    });

    6、添加显示

    JFrame jf = new JFrame("树形结构");
    jf.add(tree);
    jf.setVisiable(true);

    7、对树属性的一些描述方法举例

    //获取树节点渲染器
    DefaultTreeCellRenderer cellRenderer = tree.getCellRenderer();
    //设置未选择时为黑色
    cellRenderer.setTextNonSelectionColor(Color.black);
    //设置选择时为蓝色
    cellRenderer.setTextSelectionColor(Color.blue);
    //设置选择模式只能选择一个
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

    代码举例:

    package test;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Toolkit;
    
    import javax.swing.JFrame;
    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;
    
    
    @SuppressWarnings("serial")
    public class Test extends JFrame implements TreeSelectionListener{
        private DefaultMutableTreeNode root, node_1, node_2;
        private DefaultTreeModel treeModel;
        private JTree tree;
        public Test(){
            this.setSize(200, 150);
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            int x = (screenSize.width - this.getSize().width)/2;
            int y = (screenSize.height - this.getSize().height)/2;
            this.setLocation(x, y);
            
            root = new DefaultMutableTreeNode("根节点");
            node_1 = new DefaultMutableTreeNode("一级");
            node_2 = new DefaultMutableTreeNode("二级");
            
            treeModel = new DefaultTreeModel(root);
            treeModel.insertNodeInto(node_1, root, root.getChildCount());
            treeModel.insertNodeInto(node_2, node_1, node_1.getChildCount());
            
            tree = new JTree(treeModel);
            tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
            
            DefaultTreeCellRenderer cellRenderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
            cellRenderer.setTextNonSelectionColor(Color.black);
            cellRenderer.setTextSelectionColor(Color.blue);
            
            this.add(tree);
            this.setVisible(true);
        }
    
        public void valueChanged(TreeSelectionEvent e) {
            
        }
        public static void main(String[] args){
            @SuppressWarnings("unused")
            Test test = new Test();
        }
        
    }

    运行如下图:

  • 相关阅读:
    bzoj2124 等差子序列(树状数组+hash)
    CF817F MEX Queries(线段树上二分)
    [USACO12MAR]摩天大楼里的奶牛(状态压缩DP)
    CF786B Legacy(线段树优化建图)
    绿豆蛙的归宿
    单选错位
    聪聪和可可
    Tyvj1952 Easy
    OSU!
    弱题
  • 原文地址:https://www.cnblogs.com/fantasy01/p/3791567.html
Copyright © 2020-2023  润新知