1.1 JTree深入浅出
1.1.1 用HashTable构造JTree树
package com.jtree;
/**
*
* <p>Title: HelloWorld之JAVA基础</p>
*
* <p>Description: JAVA基础</p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: HelloWorld of QYSOFT</p>
*
* @author 商延涛
* @version 1.0
*/
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
import java.beans.*;
import java.awt.BorderLayout;
import java.awt.Rectangle;
/*
使用JTree组件:
java.lang.Object
--java.awt.Component
--java.awt.Container
--javax.swing.JComponent
--javax.swing.JTree
JTree构造函数:
JTree():建立一棵系统默认的树。
JTree(Hashtable value):利用Hashtable建立树,不显示root node(根节点).
JTree(Object[] value):利用Object Array建立树,不显示root node.
JTree(TreeModel newModel):利用TreeModel建立树。
JTree(TreeNode root):利用TreeNode建立树。
JTree(TreeNode root,boolean asksAllowsChildren):利用TreeNode建立树,并决定是否允许子节点的存在.
JTree(Vector value):利用Vector建立树,不显示root node.
*/
public class SimpleTree extends JFrame {
public SimpleTree() {
this.setSize(500, 300);
this.setLocation(150, 150);
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
SimpleTree tree = new SimpleTree();
tree.setVisible(true);
tree.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void jbInit() throws Exception {
String[] s1 = {"公司文件", "个人信件", "私人文件"};
String[] s2 = {"本机磁盘(C:)", "本机磁盘(D:)", "本机磁盘(E:)"};
String[] s3 = {"奇摩站", "职棒消息", "网络书店"};
Hashtable hashtable1 = new Hashtable();
Hashtable hashtable2 = new Hashtable();
hashtable1.put("我的公文包", s1);
hashtable1.put("我的电脑", s2);
hashtable1.put("收藏夹", hashtable2);
hashtable2.put("网站列表", s3);
this.setTitle("测试树");
this.getContentPane().setLayout(borderLayout1);
this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel1.add(jSplitPane1);
jSplitPane1.add(jScrollPane1, JSplitPane.LEFT);
jTree1 = new JTree(hashtable1);
jScrollPane1.getViewport().add(jTree1);
jSplitPane1.setBounds(new Rectangle(36, 30, 339, 246));
jPanel1.setLayout(null);
}
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
JSplitPane jSplitPane1 = new JSplitPane();
JScrollPane jScrollPane1 = new JScrollPane();
JTree jTree1;
}
1.1.2 用TreeTable构造JTree树
除了以节点的观念(TreeNode)建立树之外,你可以用data model的模式建立树。树的data model称为TreeModel,用此模式的好处
是可以触发相关的树事件,来处理树可能产生的一些变动。TreeModel是一个interface,里面定义了8种方法;如果你是一个喜欢自己
动手做的人,或是你想显示的数据格式很复杂,你可以考虑直接实作TreeModel界面中所定义的方法来构造出JTree.TreeModel界面
的方法如下所示:
TreeModel方法:
void addTreeModelListener(TreeModelListener l):增加一个TreeModelListener来监控TreeModelEvent事件。
Object getChild(Object parent,int index):返回子节点。
int getChildCount(Object parent):返回子节点数量.
int getIndexOfChild(Object parent,Object child):返回子节点的索引值。
Object getRoot():返回根节点。
boolean isLeaf(Object node):判断是否为树叶节点。
void removeTreeModelListener(TreeModelListener l):删除TreeModelListener。
void valueForPathChanged(TreePath path,Object newValue):当用户改变Tree上的值时如何应对。
你可以实作出这8种方法,然后构造出自己想要的JTree,不过在大部份的情况下我们通常不会这样做,毕竟要实作出这8种方法不
是件很轻松的事,而且java本身也提供了一个默认模式,叫做DefaultTreeModel,这个类已经实作了TreeModel界面,也另外提供许
多实用的方法。利用这个默认模式,我们便能很方便的构造出JTree出来了。下面为DefaultTreeModel的构造函数与范例:
DefaultTreeModel构造函数:
DefaultTreeModel(TreeNode root):建立DefaultTreeModel对象,并定出根节点。
DefaultTreeModel(TreeNode root,Boolean asksAllowsChildren):建立具有根节点的DefaultTreeModel对象,并决定此节点是否允
许具有子节点。
1.1.3 用DefaultTreeModel 构造树
package com.jtree;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.util.Hashtable;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class DefaultModelDemo extends JFrame {
public DefaultModelDemo() {
this.setSize(500, 300);
this.setLocation(150, 150);
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
DefaultModelDemo tree = new DefaultModelDemo();
tree.setVisible(true);
tree.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void jbInit() throws Exception {
this.setTitle("测试默认模型树");
this.getContentPane().setLayout(borderLayout1);
this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel1.add(jScrollPane1);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("JAVA");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("J2SE");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("J2EE");
DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("J2ME");
root.add(node1);
root.add(node2);
root.add(node3);
jTree1 = new JTree(root);
jScrollPane1.getViewport().add(jTree1);
jScrollPane1.setBounds(new Rectangle(42, 38, 208, 216));
jPanel1.setLayout(null);
}
JPanel jPanel1 = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JScrollPane jScrollPane1 = new JScrollPane();
JTree jTree1;
}