JTree组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。
例如 Windows 系统的文件管理器,它就是一个典型的树层次结构。
JTree的构造函数:
·JTree() 建立一棵默认的树。
·JTree(Hashtable data) 利用Hashtable建立树。
·JTree(Object[] data) 利用数组建立树。
·JTree(TreeModel model) 利用TreeModel建立树。
·JTree(TreeNode root) 建立以root为根的树。
·JTree(TreeNode root,Boolean children) 建立以 root 为根的树,并设定是否允许有子节点。
·JTree(Vector value) 利用Vector建立树。
使用一个JTree可以简单地像下面这样表示:
import?javax.swing.JFrame;
import?javax.swing.JTree;
import?javax.swing.event.TreeSelectionEvent;
import?javax.swing.event.TreeSelectionListener;
import?javax.swing.tree.DefaultMutableTreeNode;
public?class?TreeDemo?{
public?static?void?main(String[]?args)?{
//?创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
//?public?DefaultMutableTreeNode(Object?userObject)
DefaultMutableTreeNode?node1?=?new?DefaultMutableTreeNode("软件部");
node1.add(new?DefaultMutableTreeNode(new?User("小花")));
node1.add(new?DefaultMutableTreeNode(new?User("小虎")));
node1.add(new?DefaultMutableTreeNode(new?User("小龙")));
DefaultMutableTreeNode?node2?=?new?DefaultMutableTreeNode("销售部");
node2.add(new?DefaultMutableTreeNode(new?User("小叶")));
node2.add(new?DefaultMutableTreeNode(new?User("小雯")));
node2.add(new?DefaultMutableTreeNode(new?User("小夏")));
DefaultMutableTreeNode?top?=?new?DefaultMutableTreeNode("职员管理");
top.add(new?DefaultMutableTreeNode(new?User("总经理")));
top.add(node1);
top.add(node2);
final?JTree?tree?=?new?JTree(top);
JFrame?f?=?new?JFrame("JTreeDemo");
f.add(tree);
f.setSize(300,?300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//?添加选择事件
tree.addTreeSelectionListener(new?TreeSelectionListener()?{
@Override
public?void?valueChanged(TreeSelectionEvent?e)?{
DefaultMutableTreeNode?node?=?(DefaultMutableTreeNode)?tree
.getLastSelectedPathComponent();
if?(node?==?null)
return;
Object?object?=?node.getUserObject();
if?(node.isLeaf())?{
User?user?=?(User)?object;
System.out.println("你选择了:"?+?user.toString());
}
}
});
}
}
class?User?{
private?String?name;
public?User(String?n)?{
name?=?n;
}
//?重点在toString,节点的显示文本就是toString
public?String?toString()?{
return?name;
}
}