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;
}
}
|