📄 treedemo3.java
字号:
/*
++ 树(Tree)的使用与介绍
10-4:以TreeModel构造JTree.
除了以节点的观念(TreeNode)建立树之外,你可以用data model的模式建立树。
树的data model称为TreeModel,用此模式的好处是可以触发相关的树事件,来处理树可能产生的
一些变动。TreeModel是一个interface,里面定义了8种方法;如果你是一个喜欢自己动手做的人,
或是你想显示的数据格式很复杂,你可以考虑直接实作TreeModel界面中所定义的方法来构造出
JTree.TreeModel界面的方法如下所示:
TreeModel方法:
1、void addTreeModelListener(TreeModelListener l):增加一个TreeModelListener
来监控TreeModelEvent事件。
2、Object getChild(Object parent,int index):返回子节点。
3、int getChildCount(Object parent):返回子节点数量.
4、int getIndexOfChild(Object parent,Object child):返回子节点的索引值。
5、Object getRoot():返回根节点。
6、boolean isLeaf(Object node):判断是否为树叶节点。
7、void removeTreeModelListener(TreeModelListener l):删除TreeModelListener。
8、void valueForPathChanged(TreePath path,Object newValue):当用户改变Tree上的
值时如何应对。
你可以实现这8种方法,然后构造出自己想要的JTree,不过在大部份的情况下我们通常不会这
样做,毕竟要实作出这8种方法不是件很轻松的事,而且java本身也提供了一个默认模式,叫做
DefaultTreeModel,这个类已经实作了TreeModel界面,也另外提供许多实用的方法。利用这个默
认模式,我们便能很方便的构造出JTree出来了。下面为DefaultTreeModel的构造函数与范例:
DefaultTreeModel构造函数:
1、DefaultTreeModel(TreeNode root):建立DefaultTreeModel对象,并定出根节点。
2、DefaultTreeModel(TreeNode root,Boolean asksAllowsChildren):建立具有根节点的
DefaultTreeModel对象,并决定此节点是否允许具有子节点。
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
//import com.incors.plaf.alloy.*;//组件的下载网址http://www.incors.com/lookandfeel/
/*将alloy.jar放在c:\j2sdk1.4.0\jre\lib\ext\目录下.
*/
public class TreeDemo3
{
public TreeDemo3()
{
JFrame f = new JFrame("TreeDemo");
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");
DefaultTreeModel treeModel = new DefaultTreeModel(root);
/*DefaultTreeModel类所提供的insertNodeInto()方法加入节点到父节点的数量.
*利用DefaultMutableTreeNode类所提供的getChildCount()方法取得目前子节点的数量.
*/
System.out.println(root.getChildCount());
treeModel.insertNodeInto(node1, root, root.getChildCount());
System.out.println(root.getChildCount());
treeModel.insertNodeInto(node2, root, root.getChildCount());
System.out.println(root.getChildCount());
treeModel.insertNodeInto(node3, root, root.getChildCount());
treeModel.insertNodeInto(node4, root, root.getChildCount());
DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("公司文件");
//DefaultTreeModel类所提供的insertNodeInto()方法加入节点到父节点的数量.
treeModel.insertNodeInto(leafnode, node1, node1.getChildCount());
leafnode = new DefaultMutableTreeNode("个人信件");
treeModel.insertNodeInto(leafnode, node1, node1.getChildCount());
leafnode = new DefaultMutableTreeNode("私人文件");
treeModel.insertNodeInto(leafnode, node1, node1.getChildCount());
leafnode = new DefaultMutableTreeNode("本机磁盘(C:)");
treeModel.insertNodeInto(leafnode, node2, node2.getChildCount());
leafnode = new DefaultMutableTreeNode("本机磁盘(D:)");
treeModel.insertNodeInto(leafnode, node2, node2.getChildCount());
leafnode = new DefaultMutableTreeNode("本机磁盘(E:)");
treeModel.insertNodeInto(leafnode, node2, node2.getChildCount());
DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("网站列表");
treeModel.insertNodeInto(node31, node3, node3.getChildCount());
leafnode = new DefaultMutableTreeNode("奇摩站");
treeModel.insertNodeInto(leafnode, node31, node31.getChildCount());
leafnode = new DefaultMutableTreeNode("职棒消息");
treeModel.insertNodeInto(leafnode, node31, node31.getChildCount());
leafnode = new DefaultMutableTreeNode("网络书店");
treeModel.insertNodeInto(leafnode, node31, node31.getChildCount());
//try {
//LookAndFeel alloyLnF = new AlloyLookAndFeel();
//UIManager.setLookAndFeel(alloyLnF);
//} catch (UnsupportedLookAndFeelException ex) {
// You may handle the exception here
//}
// this line needs to be implemented in order to make JWS work properly
UIManager.getLookAndFeelDefaults().put("ClassLoader", getClass().getClassLoader());
//以TreeModel建立JTree。
JTree tree = new JTree(treeModel);
/*改变JTree的外观**/
tree.putClientProperty("JTree.lineStyle","Angled");
/*改变JTree的外观**/
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 TreeDemo3();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -