如何创建树结构组织? 可以参考composite模式。http://www.jdon.com/designpatterns/composite.htm 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class TreeDemo1{ public TreeDemo1() { JFrame f = new JFrame("TreeDemo"); Container contentPane = f.getContentPane(); String[] s1 = {"公司文件","个人信件","私人文件"}; String[] s2 = {"本机磁盘(C:)","本机磁盘(D:)","本机磁盘(E:)"}; String[] s3 = {"奇摩站","职棒消息","网络书店"}; Hashtable hashtable1 = new Hashtable(); Hashtable hashtable2 = new Hashtable(); hashtable1.put("我的公文包",s1); hashtable1.put("我的电脑",s2); hashtable1.put("收藏夹",hashtable2); hashtable2.put("网站列表",s3); JTree tree = new JTree(hashtable1); 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 TreeDemo1(); }} 可以通过定制树模型来构建。也可以继承DefaultMutableTreeNode,添加你需要的变量和操作有一本好的《java2 swing 图形设计》的书,上面有一个详细的树的例子-用树来查看磁盘文件和目录。 http://www.jdon.com/designpatterns/composite.htm 没有这个站点啊 我昨天看这个站点还没有问题的,出了毛病了,我faint!其实DefaultMutableTreeNode类本身的实现就是一个典型的composite模式的使用。只是从前台JTree的调用者来说大多数情况下并没有实际关心它的实现的必要,而是只关心DefaultMutableTreeNode的显示部分,就是树的节点的表达。实际上就是这个类本身的代码,也是遵从composite模式来组织的。而恰恰树的数据结构用这种模式是最合适的。对于每一个DefaultMutableTreeNode,都有一个UserObject对象,前者可以看作后者的某种对应。UserObject可以是很多类型,如果只是简单的String类,那么就是一个简单的前台显示,所有的树枝节点树叶节点之间的关系就通过对应的DefaultMutableTreeNode之间的关系得到了组织。如果不是要做树的显示,用到别的后台应用的时候,需要自己定义这种树机构的数据关系,就要使用composite的模式,就是要设计自己的不用于显示的类似于DefaultMutableTreeNode的类。楼主可以找相关的模式实现的文章看看。昨天留的网址,好在文章我有备份,楼主如果需要的话可以留个Email。 shadow_dancer(影舞者) 太深奥啊 能不能举个例子来说明, 这样我好理解一些 因为我对这方面太陌生了 麻烦了 谢谢 就用文件的例子吧。首先,树枝节点(目录)和树叶节点(实际文件)都由一个接口产生,不妨设这个接口为:public Interface MyFile{ public MyFile{ } // 打开文件的方法,对目录和文件都适用 public void open() { } /** *还可以定义一些其他的公共方法 */}对于目录,实现这个接口。类似这种形式:import java.util.Vector;public class MyDirectory implements MyFile { private Vector childrenFiles = new Vector(); public MyDirectory{} //实现接口中的针对目录的具体的open方法 public void open() { //具体的实现处理 } public void addFile(MyFile childmf){ childrenFiles.add(childmf); //为目录添加文件的方法。注意参数是接口类型的声明,实际可以是目录,也可以是文件。 } public void remove(MyFile childmf){ childrenFiles.remove(childmf); //删除目录下的一个文件的方法,也可以是一个目录。 } public Vector getChildrenFiles() { return childrenFiles; //返回这个目录下所有的子节点文件。 } /* * 其他公共方法的实现 */}对于树叶节点的文件,其类可以定义为:public class MyLeafFile implements MyFile { public MyLeafFile () {} public void open{ //具体实现对于树叶节点文件的打开操作。 } /* *其他公共方法的具体实现 */ }这是一个简单的例子,主要是想表明通常的这种设计方式。通用的接口定义树枝和树叶节点的公共的一些属性和方法,但从功能上讲,树枝节点的功能要更多。体现在树枝节点具有组织其Children子结点的Vector类型的属性,并且提供add、remove和getChildrenFiles等对于子节点的操作方法。而叶节点的类中则没有这样的类和方法。这只是一个很简单的实现,但是希望能对你理解这种模式有所帮助。:) sorry,应为“而叶节点的类中则没有这样的属性和方法。”笔误。 想得到一个样式201111080001 select表单提交到jsp后自动返回到提交界面,怎么让select中显示刚才提交的值呢? 遍历根目录java文件,怎样得到每个类文件的包名呢? Hibernate中的分页问题,提个建议,谢谢! java写文件的换行问题 如何在java程序中打开默认浏览器并打开指定的url? Vector数据排序问题 数据库连接池的问题? oracle8.16下的乱码?ZHS16GBK和java的字符转化都试过了,还有什么可能情况? 谁帮我做课程设计 简单问题的算法 求解 有没有办法让java和程序来激活window任务栏中的程序?
import java.awt.*;
import java.awt.event.*;
import java.util.*;public class TreeDemo1
{
public TreeDemo1()
{
JFrame f = new JFrame("TreeDemo");
Container contentPane = f.getContentPane();
String[] s1 = {"公司文件","个人信件","私人文件"};
String[] s2 = {"本机磁盘(C:)","本机磁盘(D:)","本机磁盘(E:)"};
String[] s3 = {"奇摩站","职棒消息","网络书店"};
Hashtable hashtable1 = new Hashtable();
Hashtable hashtable2 = new Hashtable();
hashtable1.put("我的公文包",s1);
hashtable1.put("我的电脑",s2);
hashtable1.put("收藏夹",hashtable2);
hashtable2.put("网站列表",s3);
JTree tree = new JTree(hashtable1);
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 TreeDemo1();
}
}
有一本好的《java2 swing 图形设计》的书,上面有一个详细的树的例子-用树来查看磁盘文件和目录。
其实DefaultMutableTreeNode类本身的实现就是一个典型的composite模式的使用。只是从前台JTree的调用者来说大多数情况下并没有实际关心它的实现的必要,而是只关心DefaultMutableTreeNode的显示部分,就是树的节点的表达。实际上就是这个类本身的代码,也是遵从composite模式来组织的。而恰恰树的数据结构用这种模式是最合适的。
对于每一个DefaultMutableTreeNode,都有一个UserObject对象,前者可以看作后者的某种对应。UserObject可以是很多类型,如果只是简单的String类,那么就是一个简单的前台显示,所有的树枝节点树叶节点之间的关系就通过对应的DefaultMutableTreeNode之间的关系得到了组织。
如果不是要做树的显示,用到别的后台应用的时候,需要自己定义这种树机构的数据关系,就要使用composite的模式,就是要设计自己的不用于显示的类似于DefaultMutableTreeNode的类。
楼主可以找相关的模式实现的文章看看。
昨天留的网址,好在文章我有备份,楼主如果需要的话可以留个Email。
public Interface MyFile{
public MyFile{
}
// 打开文件的方法,对目录和文件都适用
public void open() {
}
/**
*还可以定义一些其他的公共方法
*/
}
对于目录,实现这个接口。类似这种形式:
import java.util.Vector;
public class MyDirectory implements MyFile {
private Vector childrenFiles = new Vector();
public MyDirectory{}
//实现接口中的针对目录的具体的open方法
public void open() {
//具体的实现处理
}
public void addFile(MyFile childmf){
childrenFiles.add(childmf);
//为目录添加文件的方法。注意参数是接口类型的声明,实际可以是目录,也可以是文件。
}
public void remove(MyFile childmf){
childrenFiles.remove(childmf);
//删除目录下的一个文件的方法,也可以是一个目录。
}
public Vector getChildrenFiles() {
return childrenFiles;
//返回这个目录下所有的子节点文件。
}
/*
* 其他公共方法的实现
*/
}对于树叶节点的文件,其类可以定义为:
public class MyLeafFile implements MyFile {
public MyLeafFile () {}
public void open{
//具体实现对于树叶节点文件的打开操作。
}
/*
*其他公共方法的具体实现
*/
}
这是一个简单的例子,主要是想表明通常的这种设计方式。通用的接口定义树枝和树叶节点的公共的一些属性和方法,但从功能上讲,树枝节点的功能要更多。体现在树枝节点具有组织其Children子结点的Vector类型的属性,并且提供add、remove和getChildrenFiles等对于子节点的操作方法。而叶节点的类中则没有这样的类和方法。
这只是一个很简单的实现,但是希望能对你理解这种模式有所帮助。:)