首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> C#/CSHARP教程
用java小程序applet实现无限级树结构-JSP教程,Java技巧及代码
作者:网友供稿 点击:208
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册58元/年,空间150元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
该程序可以根据从指定的xml文件中读取的有关信息动态的建立一棵树。

1.该树的特点:

1)无限级树结构

理论上树的深度可以无限,树的深度由xml文件所给的信息确定;

数据加载采用一次加载和动态加载相结合的方法;

每次打开相关页时重新加载树结构,真正的做到了建立树的动态性。

2)复用性

由于这棵树是通过读取xml文件建立的,树的程序代码固定,所以具有很强的复用性。只需要给出xml文件,程序就可以建立对应的树。

3)与用户的交互

由于该程序是用java小程序实现的,所以可以利用java语言中监听事件的类,以响应用户操作。与用户具有更好的交互性。

2.程序结构

这棵树主要有三个类实现:

1) 类treenode:该类起辅助作用,用来描述树的数据结构,并提供一些setter,getter函数用来设置树结构的属性。

2) 类iconrender:该类也是一个辅助类,用来设置树节点的图标。并且可以根据树节点的选中状态改变图标。

3) 类applettree:该类是建立这棵树的主要类,它继承自applet并且实现了treeselectionlistener接口,以用来监听用户操作。树结构由java类jtree显示,我们只需要合理的设定jtree的属性就可以构造出这棵树。而它的属性是通过jdom中的element读取xml文件提供的。上面已经提到监听用户操作是通过实现treeselectionlistener接口完成的,但是只监听不响应毫无用处。怎样才能将监听到的用户操作传给相应的类以响应用户的操作呢?这里用的方法是通过url将参数传递给jsp文件,再由jsp文件传给相应的操作类实现的。

这三个类的代码如下:

1.treenode类

public class treenode{

private string id;

private string name;

private string link;

public treenode(string id,string name,string link){

this.id=id;

this.name=name;

this.link=link;

}

public string getid(){

return id;

}

public void setid(string id){

this.id=id;

}

public void setname(string name){

this.name=name;

}



public string getname(){

return name;

}



public string tostring(){

return name;

}

public string getlink(){

return link;

}

public void setlink(string link){

this.link=link;

}

}

2. iconrender类

import javax.swing.*;

import java.awt.*;

import javax.swing.tree.*;

import javax.swing.tree.defaulttreecellrenderer;

iconrender

class extends defaulttreecellrenderer {





//创建用于显示的图标

public static final imageicon leafselectedicon = new imageicon("openedfolder.ico");

public static final imageicon leafunselectedicon = new imageicon("closedfolder.ico");

public static final imageicon folderopen = new imageicon("openedfolder.ico");

public static final imageicon folderclose = new imageicon("closedfolder.ico");



//设定图标随选中状态的变化

public component gettreecellrenderercomponent(jtree

tree,object value,boolean selected,boolean expanded,

boolean leaf, int row,boolean hasfocus)

{

super.gettreecellrenderercomponent(tree,value, selected, expanded, leaf, row, hasfocus);



if (leaf && selected) {

seticon(iconrender.leafselectedicon);

}

else if (leaf) {

seticon(iconrender.leafunselectedicon);

}



return this;

}



public iconrender() {

super();

if((leafselectedicon != null)&&(leafunselectedicon != null))

system.out.println("iconrender:trace");



setleaficon(leafunselectedicon);

setopenicon(folderopen);

setclosedicon(folderclose);



}



}

3.applettree类

import javax.swing.event.*;

import java.awt.*;

import java.applet.*;

import javax.swing.*;

import javax.swing.tree.*;

import java.awt.event.*;

import org.jdom.*;

//import org.w3c.dom.nodelist;

import org.jdom.input.*;

import java.io.*;

import java.util.*;

import java.net.*;



import java.awt.*;

import javax.swing.*;

import javax.swing.border.*;

import javax.swing.plaf.*;

import javax.swing.plaf.basic.*;

import javax.swing.plaf.metal.*;







import java.io.*;

//import netscape.javascript.*;

class mywindowlistener extends windowadapter

{

public void windowclosing(windowevent e)

{

system.exit(1);

}

}



public class applettree extends applet implements treeselectionlistener

{

private jtree tree;



private treepath path;

private jscrollpane treeview;

private defaultmutabletreenode top;



private defaultmutabletreenode clicknode;







private string link;



public applettree(){

}

mouselistener ml = new mouseadapter() {

public void mousepressed(mouseevent e) {

int selrow = tree.getrowforlocation(e.getx(), e.gety());

treepath selpath = tree.getpathforlocation(e.getx(), e.gety());

if(selrow != -1) {

if(e.getclickcount() == 1) {

system.out.print("点击一次鼠标");



//得到最后一个节点

defaultmutabletreenode treenode = (defaultmutabletreenode)selpath.getlastpathcomponent();

boolean isleaf = treenode.isleaf();



treenode objtreenode = (treenode)treenode.getuserobject();

system.out.println(isleaf);

system.out.println(objtreenode .getname()) ;

system.out.println(objtreenode .getid()) ;

if(isleaf)

{//如果为叶子节点就传出去进行查询操作

try

{

getappletcontext().showdocument(new url("http://127.0.0.1:8080/tree/showdevice.htm"),"f2" );

}

catch(exception ex)

{

system.out.print(ex);

}

}



}

else if(e.getclickcount() == 2) {

system.out.print("点击两次鼠标");

//getappletcontext().showdocument(new url("http://www.csdn.net/"));

//mydoubleclick(selrow, selpath);

}

}

}

};





public void start()

{

super.start();

}



public void init(){

try{

super.init();

this.setlayout(new gridlayout(1,1));

tree=createtree(new fileinputstream("e:/example/treexml.xml"));

tree.getselectionmodel().setselectionmode(treeselectionmodel.single_tree_selection);

tree.putclientproperty("jtree.linestyle","angled");



tree.setshowsroothandles(true);

tree.seteditable(true);

tree.addtreeselectionlistener( this );

iconrender render=new iconrender();

tree.setcellrenderer(render);





treeview = new jscrollpane(tree);

//toppanel.add(tree);

this.add(treeview);



tree.addmouselistener(ml);



}catch(exception e){

e.printstacktrace();

}



}

public jtree createtree(inputstream is){

saxbuilder builder = new saxbuilder();

try {

document doc = builder.build(is);

element root=doc.getrootelement();

treenode rootnode=new

treenode(root.getattributevalue("id"),root.getattributevalue("name"),root.getattributevalue("havechildren"));

top=new defaultmutabletreenode(rootnode);

addnode(root,top);

} catch (exception ex) {

ex.printstacktrace();

}

//可以在这里改变jtree中连线的颜色

uimanager.put( "tree.hash", new coloruiresource(color.red) );

return new jtree(top);



}



/**

*

* @param e 待加入树中的jdom元素

* @param fathernode 树节点父亲节点

*/



private void addnode(element e,defaultmutabletreenode fathernode){

try{

iterator it=e.getchildren().iterator();

if(!it.hasnext())

return;

while(it.hasnext()){



element sub=(element)it.next();



string id=new string(sub.getattributevalue("id").getbytes(),"gb2312");

string name=new string(sub.getattributevalue("name").getbytes(),"gb2312");

string link=new string(sub.getattributevalue("havechildren").getbytes(),"gb2312");



system.out.println(id);

system.out.println(name);

system.out.println(link);



treenode tempnode=new treenode(id,name,link);



defaultmutabletreenode node=new defaultmutabletreenode(tempnode);

fathernode.add(node);



if(link.equals("true")){

system.out.println("true~! equal test");

addnode(sub,node);

}

}

}

catch(exception exp)

{

system.out.println("encoding fail");

}



}



/**

* 根据id,查找树节点,//广度优先

* @param id 节点id

* @param rootnode 树根节点

* @return defaultmutabletreenode

*/

private defaultmutabletreenode gettreenode(string id,defaultmutabletreenode rootnode){

defaultmutabletreenode returnnode=null;

if(rootnode!=null){

enumeration enum=rootnode.breadthfirstenumeration();

while(enum.hasmoreelements()){

defaultmutabletreenode temp=(defaultmutabletreenode)enum.nextelement();

treenode node=(treenode)temp.getuserobject();

if(node.getid().equals(id)){

returnnode=temp;

break;

}

}

}

return returnnode;



}





public void valuechanged( treeselectionevent event ){

if( event.getsource() == tree ){

path = event.getpath();

clicknode=(defaultmutabletreenode)path.getlastpathcomponent();

object uo=clicknode.getuserobject();

if(uo instanceof treenode){

treenode nd=(treenode)clicknode.getuserobject();

link=nd.getlink();

}

}

}





public static void main(string[] args ){

jframe frame1=new jframe("test");

applettree tree=new applettree();

tree.init();

frame1.getcontentpane().add(tree);

frame1.setsize(600,600);



frame1.show();

frame1.addwindowlistener(new mywindowlistener());

}



}



文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·C#学习杂记-.NET教程,C#语言
·使用C#编写Windows Forms应用程序(转)-.NET教程,Windows开发
·《.net编程先锋C#》第一章 C#简介-.NET教程,C#语言
·将文本格式的文章转换为html/xml格式文本的功能封装到Javabean-JSP教程,Java技巧及代码
·用java小程序applet实现无限级树结构-JSP教程,Java技巧及代码
·《.net编程先锋C#》第三章 第一个C#应用程序-.NET教程,C#语言
·《.net编程先锋C#》第二章 理论基础-公用语言 运行环境-.NET教程,C#语言
·《.net编程先锋C#》第五章 类-.NET教程,C#语言
·企业人事信息管理系统1.0-ASP教程,数据库相关
·《.net编程先锋C#》第四章 C#类型-.NET教程,C#语言
最新文章
·使用UTF-8编码/JMail组件发送邮件乱码问题-.NET教程,组件控件开发
·收藏一段小的.net下的验证码片段-.NET教程,.NET Framework
·经典收藏之 - C++内存管理详解-.NET教程,C#语言
·用VB播放Avi、Wave、midi文件-.NET教程,VB.Net语言
·MSComm控件在中文Windows下的通信问题与处理方法-.NET教程,组件控件开发
·Remoting的承载方式是这样的-.NET教程,评论及其它
·IBatisNet配置-.NET教程,评论及其它
·Windows应用程序调试必备的--符号文件(Symbols)-.NET教程,评论及其它
·用asp实现自己的UrlDeCode-ASP教程,ASP应用
·C#2.0-extern-.NET教程,C#语言
相关主题
  • 用javascript实现页面无刷新更新数据-网页设计,HTML/CSS
  • 用javascript评估用户输入密码的强度-网页设计,HTML/CSS
  • 用javascript+PHP随机显示图片-PHP教程,PHP应用
  • 用java编写简单UDP网络通信程序-JSP教程,Java技巧及代码
  • 用Java实现FTP服务器-JSP教程,Java技巧及代码
  • 西部数码虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭

    网上大名: