ITEEDU

10-3:以TreeNode构造JTree:

JTree上的每一个节点就代表一个TreeNode对象,TreeNode本身是一个Interface,里面定义了7个有关节点的方法,例如判断是否 为树叶节点、有几个子节点(getChildCount())、父节点为何(getparent())等等、这些方法的定义你可以在javax.swing.tree的 package中找到,读者可自行查阅java api文件。在实际的应用上,一般我们不会直接实作此界面,而是采用java所提供的 DefaultMutableTreeMode类,此类是实作MutableTreeNode界面而来,并提供了其他许多实用的方法。MutableTreeNode本身也是一 个Interface,且继承了TreeNode界面此类主要是定义一些节点的处理方式,例如新增节点(insert())、删除节点(remove())、设置 节点(setUserObject())等。

整个关系如下图:

TreeNode----extends--->MutableTreeNode---implements---DefaultMutableTreeNode

接下来我们来看如何利DefaultMutableTreeNode来建立JTree,我们先来看DefaultMutableTreeNode的构造函数:

DefaultMutableTreeNode构造函数:
  • DefaultMutableTreeNode():建立空的DefaultMutableTreeNode对象。
  • DefaultMutableTreeNode(Object userObject):建立DefaultMutableTreeNode对象,节点为userObject对象。
  • DefaultMutableTreeNode(Object userObject,Boolean allowsChildren):建立DefaultMutableTreeNode对象,节点为userObject对 象并决定此节点是否允许具有子节点。

以下为利用DefaultMutableTreeNode建立JTree的范例:

TreeDemo2.java

此程序"资源管理器"为此棵树的根节点.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class TreeDemo2 {
	public TreeDemo2() {
		JFrame f = new JFrame("TreeDemo2");
		Container contentPane = f.getContentPane();

		DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器");
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("我的公文包");
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("我的电脑");
		DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("收藏夹");
		DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("Readme");
		root.add(node1);
		root.add(node2);
		root.add(node3);
		root.add(node4);

		DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("公司文件");
		node1.add(leafnode);
		leafnode = new DefaultMutableTreeNode("私人文件");
		node1.add(leafnode);
		leafnode = new DefaultMutableTreeNode("个人信件");

		leafnode = new DefaultMutableTreeNode("本机磁盘(C:)");
		node2.add(leafnode);
		leafnode = new DefaultMutableTreeNode("本机磁盘(D:)");
		node2.add(leafnode);
		leafnode = new DefaultMutableTreeNode("本机磁盘(E:)");
		node2.add(leafnode);

		DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("网站列表");
		node3.add(node31);

		leafnode = new DefaultMutableTreeNode("奇摩站");
		node31.add(leafnode);
		leafnode = new DefaultMutableTreeNode("职棒消息");
		node31.add(leafnode);
		leafnode = new DefaultMutableTreeNode("网络书店");
		node31.add(leafnode);

		JTree tree = new JTree(root);
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setViewportView(tree);

		contentPane.add(scrollPane);
		f.pack();
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	public static void main(String[] args) {
		new TreeDemo2();
	}
}