JTree控件

JTree 类用于实现树,它的主要功能是把数据按照树状进行显示,可明确数据的层次关系。JTree 树中最基本的对象为节点,表示在给定层次结构中的数据项。树以垂直方式显示数据,每行显示一个节点。树中只有一个根节点,所有其他节点从这里引出。除根节点外,其他节点分为两类:一类是代子节点的分支节点,另一类是不带子节点的叶节点。

JTree 类实现树结构,常用构造方法如下:

  • JTree():返回带有示例模型的 JTree
  • JTree(Object[] value):返回 JTree,指定数组的每个元素作为不被显示的新根节点的子节点
  • JTree(TreeNode root):返回 JTree,使用指定的 root 作为其根节点
  • JTree(TreeNode root,boolean aslcsAllowsChildren):返回 JTree,使用指定的 root 作为其根节点,asksAllowsChildren 用 于确定节点是否为叶节点

JTree 类的常用方法如下:

本节主要介绍 TreeModel、TreeNode、TreeCellRender、TreeCellEditor 4个子类常用的方法。

  • TreeModel :树模型,负责节点的操作,并通知UI刷新,一般使用默认Model就可以。TreeModel常用方法如下:
方法名及返回值类型 说明
insertNodeInto 在指定节点插入子节点
removeNodeFromParent 将节点从父节点移除
getPathToRoot 获取从当前节点到根节点的路径
  • TreeNode :树节点,每个树节点可以获取到父节点和子节点的信息,构建成树结构。TreeNode常用的方法如下:
方法名及返回值类型 说明
getParent 获取父节点
getChildAt 获取节点
getChildCount 获取子节点个数
  • TreeCellRender :渲染器,与table的CellRender类似。常用方法如下:
方法名及返回值类型 说明
getTreeCellRendererComponent() 设置树控件的风格
  • TreeCellEditor :编辑器,与table的CellEditor类似。常用方法如下:
方法名及返回值类型 说明
getTreeCellEditorComponent 获取树的编辑器,可以自定义返回值

示例

继承 MyFrame 类,使用 JTree 类创建一个树控件,树控件的每个节点都有一个子节点,且层级数是无限的。具体实现代码如下:

package com.supermap.desktop.samplecode.swing.tree;
import com.supermap.desktop.samplecode.MyFrame;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import java.awt.*;

public class MyJTree extends MyFrame {
	private MyJTree() {
		JTree jTree = new JTree();

		jTree.setModel(new DefaultTreeModel(new TreeNode()));
		jTree.setCellRenderer(new DefaultTreeCellRenderer() {
			@Override
			public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
				JLabel treeCellRendererComponent = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
				treeCellRendererComponent.setText(String.valueOf(row));
				return treeCellRendererComponent;
			}
		});
		this.add(jTree);
	}
	class TreeNode extends DefaultMutableTreeNode {
		public int getChildCount() {
			return 1;
		}
		public javax.swing.tree.TreeNode getChildAt(int index) {
			return new TreeNode();
		}
	}
	public static void main(String[] args) {
		MyJTree myJTree = new MyJTree();
		myJTree.setVisible(true);
	}
}

示例代码运行结果如下,树节点可以无限展开:

JTreeResult

相关内容

JFrame 控件

JPanel 控件

JLabel 控件

JTextField 控件

JTextArea 控件

JButton 控件

JRadioButton 控件

JCheckBox 控件

JComboBox 控件

JTable 控件

JList 控件

JToolBar 控件