[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();
    }
    
}

运行如下图:

原文地址:https://www.cnblogs.com/fantasy01/p/3791567.html