JTree樹控件的使用
樹和節(jié)點(diǎn)的基本概念
樹可以用圖形的方式顯示眾多的節(jié)點(diǎn)以及它們之間的關(guān)系,最常見的樹的例子就是目錄樹。
所有組成樹的元素都成為節(jié)點(diǎn)(Node),一棵樹的最頂層的節(jié)點(diǎn)稱為根節(jié)點(diǎn),如Program;而沒有子節(jié)點(diǎn)的節(jié)點(diǎn)成為葉子節(jié)點(diǎn),如domain。在層次結(jié)構(gòu)中,上層的節(jié)點(diǎn)是下層節(jié)點(diǎn)的父節(jié)點(diǎn),而下層節(jié)點(diǎn)是上層節(jié)點(diǎn)的子節(jié)點(diǎn),如圖:Program是C# Programs和Programs的父節(jié)點(diǎn);FileBatchRemaer20070801094605是C# Programes的子節(jié)點(diǎn)。
有關(guān)樹JTree的類和接口
JTree 顯示樹的核心基本類。
TreeModel 定義了樹的數(shù)據(jù)模型接口
DefaultTreeModel 默認(rèn)的樹模型接口實(shí)現(xiàn)類
TreeModelListener 樹模型的事件監(jiān)聽器
TreePath 樹路徑。一個(gè)路徑就是一個(gè)對(duì)象數(shù)組,對(duì)應(yīng)于樹模型中從根節(jié)點(diǎn)到選定節(jié)點(diǎn)上的所有節(jié)點(diǎn)集合。數(shù)組的第一個(gè)元素是根節(jié)點(diǎn),按樹的層次關(guān)系依次在數(shù)組中給出中間節(jié)點(diǎn),最后一個(gè)元素是選定的節(jié)點(diǎn)。
MutableTreeNode 樹節(jié)點(diǎn)接口。對(duì)應(yīng)樹中的節(jié)點(diǎn)。樹節(jié)點(diǎn)接口定義了與父子節(jié)點(diǎn)有關(guān)的方法。因此,利用樹節(jié)點(diǎn)可以遍歷整棵樹。
DedaultMutableTreeNode 默認(rèn)的樹節(jié)點(diǎn)的實(shí)現(xiàn)類。
TreeSelectionModel 定義了在樹上的選擇節(jié)點(diǎn)的數(shù)據(jù)模型接口。樹選擇模型決定了選擇節(jié)點(diǎn)的策略以及被選擇節(jié)點(diǎn)的信息。
TreeSelectionModelListener 樹選擇模型事件的監(jiān)聽器。
代碼實(shí)例:構(gòu)建一棵樹
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");
DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");
DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");
DefaultMutableTreeNode socketNode=new DefaultMutableTreeNode("Socket");
DefaultMutableTreeNode threadNode=new DefaultMutableTreeNode("Thread");
j2seNode.add(swingNode);
j2seNode.add(socketNode);
j2seNode.add(threadNode);
DefaultMutableTreeNode j2eeNode=new DefaultMutableTreeNode("J2EE(JavaEE)");
DefaultMutableTreeNode jspservletNode=new DefaultMutableTreeNode("Jsp/Servlet");
DefaultMutableTreeNode jdbcNode=new DefaultMutableTreeNode("JDBC");
DefaultMutableTreeNode javaMailNode=new DefaultMutableTreeNode("Java Mail");
j2eeNode.add(jspservletNode);
j2eeNode.add(jdbcNode);
j2eeNode.add(javaMailNode);
root.add(j2seNode);
root.add(j2eeNode);
tree = new JTree(root);
相關(guān)語(yǔ)句解釋
// 創(chuàng)建一個(gè)樹節(jié)點(diǎn),文字為J2SE(JavaSE)
DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");
// 創(chuàng)建一個(gè)文字為“Swing”的節(jié)點(diǎn),添加在節(jié)點(diǎn)j2seNode下
DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");
j2seNode.add(swingNode);
// 創(chuàng)建一個(gè)文字為Java的節(jié)點(diǎn)作為根節(jié)點(diǎn),然后以此根節(jié)點(diǎn)構(gòu)建一棵樹。j2seNode,j2eeNode掛在root 下
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");
.......
root.add(j2seNode);
root.add(j2eeNode);
tree = new JTree(root);
注意: JTree和JTextArea,JTable一樣,也需要放在一個(gè)JScrollPane中。
給樹控件添加監(jiān)聽
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent evt) {
// 取得選擇狀態(tài)變化的所有路徑
TreePath[] paths = evt.getPaths();
for (int i=0; i<paths.length; i++) {
// 如果處于選擇狀態(tài)
if (evt.isAddedPath(i)) {
// 將路徑轉(zhuǎn)化為節(jié)點(diǎn)數(shù)組
Object[] nodes=paths[i].getPath();
// 得到最后一個(gè)節(jié)點(diǎn),即選擇的節(jié)點(diǎn)
DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes[nodes.length-1];
// 輸出節(jié)點(diǎn)名
System.out.println(node.toString());
}
}
}
});
額外的一點(diǎn)美化工作:渲染節(jié)點(diǎn)
// 設(shè)定葉節(jié)點(diǎn)圖標(biāo)
Icon leafIcon = new ImageIcon(TreePanel.class.getResource("/leaf.gif"));
// 設(shè)定關(guān)閉狀態(tài)節(jié)點(diǎn)圖標(biāo)
Icon closedIcon = new ImageIcon(TreePanel.class.getResource("/close.gif"));
// 設(shè)定打開狀態(tài)節(jié)點(diǎn)圖標(biāo)
Icon openIcon = new ImageIcon(TreePanel.class.getResource("/open.gif"));
// 取得樹的渲染器
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
renderer.setLeafIcon(leafIcon);// 設(shè)定葉節(jié)點(diǎn)圖標(biāo)
renderer.setClosedIcon(closedIcon);// 設(shè)定關(guān)閉狀態(tài)節(jié)點(diǎn)圖標(biāo)
renderer.setOpenIcon(openIcon);// 設(shè)定打開狀態(tài)節(jié)點(diǎn)圖標(biāo)
posted on 2008-03-03 23:02 和風(fēng)細(xì)雨 閱讀(2471) 評(píng)論(6) 編輯 收藏 所屬分類: Swing