放在JAVA安装目录\demo\jfc\SampleTree下
解决方案 »
- JAVA 随机数
- awt和swing现在还用的着吗?
- 讨论 : 通过3-4个月的培训是否可以获得1-2年软件开发的经验,
- 请问大家是用什么开发工具 开发 JSP的?
- 关于JText组件append()方法的问题
- 有难度!!! 怎样实现自上而下排列组件并能根据面板大小自动折到下一列,比如win资源管理器的文件夹查看方式中的列表模式
- 请问谁有给别人发email的java代码? 急用!谢谢!
- 帮我看看这个客户端把----------------- 送你 200 分
- 类型转换
- JAVAAPPLET动画闪烁问题(仅WEB浏览时出问题)
- 请问:怎么 使一个可执行文件运行起来。
- 给初学者一个登录的例子,别人的帮助+我的改进=有所完善,
除了以节点的观念(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对象,并决定此节点是否允
许具有子节点。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()方法取得目前子节点的数量.
*/
treeModel.insertNodeInto(node1, root, root.getChildCount());
treeModel.insertNodeInto(node2, root, 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, node3, node3.getChildCount());
leafnode = new DefaultMutableTreeNode("职棒消息");
treeModel.insertNodeInto(leafnode, node3, node3.getChildCount());
leafnode = new DefaultMutableTreeNode("网络书店");
treeModel.insertNodeInto(leafnode, node3, node3.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","Horizontal");
/*改变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();
}
}
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JScrollPane;
import java.util.Vector;
import java.util.ArrayList;
import java.util.Arrays;public class BrowseDir {
public File file = null;
static public String filePath = "f:/接收/mp3";
String tmpFilePath = null;
JFrame f = null;
DefaultMutableTreeNode root = null;
DefaultTreeModel treemodel = null;
BrowseDir() {
JTree tree = new JTree();
root = new DefaultMutableTreeNode("文件目录");
listFile(filePath, root); //生成目录树
treemodel = new DefaultTreeModel(root);
tree.setModel(treemodel);
JScrollPane spn = new JScrollPane(tree);
System.out.println("OK");
f = new JFrame("File tree");
f.getContentPane().add(spn);
f.setSize(300, 400);
f.show(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
BrowseDir bsd = new BrowseDir();
} public String[] listFile(String filepath, DefaultMutableTreeNode treenode) {
file = new File(filepath);
if (!file.exists()) {
System.out.println("file not exists!");
}
String[] filenameArray = null;
filenameArray = file.list();
filenameArray = sortDir2file(filenameArray, filepath); //文件排序
for (int i = 0; i < filenameArray.length; i++) {
// System.out.println(filenameArray[i]);
DefaultMutableTreeNode tmpnode = new DefaultMutableTreeNode(filenameArray[
i]);
treenode.add(tmpnode);
tmpFilePath = filepath + File.separator + filenameArray[i];
File tmpFile = new File(tmpFilePath);
if (tmpFile.isDirectory()) {
listFile(tmpFilePath, tmpnode);
}
//System.out.println(i);
}
return filenameArray;
} public String[] sortDir2file(String[] files, String filepath) {
Vector dir = new Vector();
Vector file = new Vector();
String[] dirs = null;
String[] tfiles = null;
String fullpath = null;
File tmpFile = null;
for (int i = 0; i < files.length; i++) {
fullpath = filepath + File.separator + files[i];
tmpFile = new File(fullpath);
if (tmpFile.isDirectory()) {
dir.addElement(files[i]);
}
else {
file.addElement(files[i]);
}
}
if (dir.size() > 0) {
dirs = new String[dir.size()];
dir.copyInto(dirs);
Arrays.sort(dirs);
}
if (file.size() > 0) {
tfiles = new String[file.size()];
file.copyInto(tfiles);
Arrays.sort(tfiles);
}
if (dirs != null && dirs.length > 0) {
for (int i = 0; i < dirs.length; i++) {
files[i] = dirs[i];
}
}
if (tfiles != null && tfiles.length > 0) {
for (int i = 0; i < tfiles.length; i++) {
if (dirs != null && dirs.length > 0) {
files[dirs.length + i] = tfiles[i];
}
else {
files[i] = tfiles[i];
}
}
} return files;
}}
有无数的树的例子。
下面是扩展TreeModel来生长树的例子。
import javax.swing.*;
import javax.swing.tree.*; public class InfiniteBinaryTree implements TreeModel { public Object getRoot() {
return new Integer(1); // start at node number 1
} public int getChildCount(Object parent) {
return 2; // because its a binary tree
} public Object getChild(Object parent, int index) {
return new Integer(2 * valueOf(parent) + index); // the magic formula
} public int getIndexOfChild(Object parent, Object child) {
return valueOf(child) % 2; // odd number == first child, even == second
} public boolean isLeaf(Object node) {
return false; // an infinite number of internal nodes and no leaves!
} // stubbed out methods not needed for display though for any real
// application at least the listener methods should be implemented.
public void addTreeModelListener(javax.swing.event.TreeModelListener l) {}
public void removeTreeModelListener(javax.swing.event.TreeModelListener l) {}
public void valueForPathChanged(TreePath path, Object newValue) {} // helper function
private int valueOf(Object obj) {
return ((Integer)obj).intValue();
}
/**
* Creates a JTree from an InfiniteBinaryTree model and displays it.
*/
public static void main(String args[]) {
JTree binTree = new JTree(new InfiniteBinaryTree());
binTree.setShowsRootHandles(true);
JFrame frame = new JFrame("Infinite Binary Tree");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(binTree));
frame.setSize(new java.awt.Dimension(400, 400));
frame.setVisible(true);
}
}