仓酷云
标题:
JAVA网页编程之用java小程序applet完成无穷级树布局
[打印本页]
作者:
兰色精灵
时间:
2015-1-18 11:41
标题:
JAVA网页编程之用java小程序applet完成无穷级树布局
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊程序该程序能够依据从指定的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类
publicclassTreeNode{
privateStringid;
privateStringname;
privateStringlink;
publicTreeNode(Stringid,Stringname,Stringlink){
this.id=id;
this.name=name;
this.link=link;
}
publicStringgetId(){
returnid;
}
publicvoidsetId(StringId){
this.id=Id;
}
publicvoidsetName(StringName){
this.name=Name;
}
publicStringgetName(){
returnname;
}
publicStringtoString(){
returnname;
}
publicStringgetLink(){
returnlink;
}
publicvoidsetLink(Stringlink){
this.link=link;
}
}
2.IconRender类
importjavax.swing.*;
importjava.awt.*;
importjavax.swing.tree.*;
importjavax.swing.tree.DefaultTreeCellRenderer;
IconRender
classextendsDefaultTreeCellRenderer{
//创立用于显现的图标
publicstaticfinalImageIconleafSelectedIcon=newImageIcon("OpenedFolder.ico");
publicstaticfinalImageIconleafUnSelectedIcon=newImageIcon("closedFolder.ico");
publicstaticfinalImageIconfolderOpen=newImageIcon("OpenedFolder.ico");
publicstaticfinalImageIconfolderClose=newImageIcon("closedFolder.ico");
//设定图标随选中形态的变更
publicComponentgetTreeCellRendererComponent(JTree
tree,Objectvalue,booleanselected,booleanexpanded,
booleanleaf,introw,booleanhasFocus)
{
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
if(leaf&&selected){
setIcon(IconRender.leafSelectedIcon);
}
elseif(leaf){
setIcon(IconRender.leafUnSelectedIcon);
}
returnthis;
}
publicIconRender(){
super();
if((leafSelectedIcon!=null)&&(leafUnSelectedIcon!=null))
System.out.println("IconRender:trace");
setLeafIcon(leafUnSelectedIcon);
setOpenIcon(folderOpen);
setClosedIcon(folderClose);
}
}
3.AppletTree类
importjavax.swing.event.*;
importjava.awt.*;
importjava.applet.*;
importjavax.swing.*;
importjavax.swing.tree.*;
importjava.awt.event.*;
importorg.jdom.*;
//importorg.w3c.dom.NodeList;
importorg.jdom.input.*;
importjava.io.*;
importjava.util.*;
importjava.net.*;
importjava.awt.*;
importjavax.swing.*;
importjavax.swing.border.*;
importjavax.swing.plaf.*;
importjavax.swing.plaf.basic.*;
importjavax.swing.plaf.metal.*;
importjava.io.*;
//importnetscape.javascript.*;
classMyWindowListenerextendsWindowAdapter
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(1);
}
}
publicclassAppletTreeextendsAppletimplementsTreeSelectionListener
{
privateJTreetree;
privateTreePathpath;
privateJScrollPanetreeView;
privateDefaultMutableTreeNodetop;
privateDefaultMutableTreeNodeclicknode;
privateStringlink;
publicAppletTree(){
}
MouseListenerml=newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
intselRow=tree.getRowForLocation(e.getX(),e.getY());
TreePathselPath=tree.getPathForLocation(e.getX(),e.getY());
if(selRow!=-1){
if(e.getClickCount()==1){
System.out.print("点击一次鼠标");
//失掉最初一个节点
DefaultMutableTreeNodetreeNode=(DefaultMutableTreeNode)selPath.getLastPathComponent();
booleanisLeaf=treeNode.isLeaf();
TreeNodeobjTreeNode=(TreeNode)treeNode.getUserObject();
System.out.println(isLeaf);
System.out.println(objTreeNode.getName());
System.out.println(objTreeNode.getId());
if(isLeaf)
{//假如为叶子节点就传进来举行查询操纵
try
{
getAppletContext().showDocument(newURL("http://127.0.0.1:8080/tree/showDevice.htm"),"f2");
}
catch(Exceptionex)
{
System.out.print(ex);
}
}
}
elseif(e.getClickCount()==2){
System.out.print("点击两次鼠标");
//getAppletContext().showDocument(newURL("http://www.csdn.net/"));
//myDoubleClick(selRow,selPath);
}
}
}
};
publicvoidstart()
{
super.start();
}
publicvoidinit(){
try{
super.init();
this.setLayout(newGridLayout(1,1));
tree=createTree(newFileInputStream("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);
IconRenderrender=newIconRender();
tree.setCellRenderer(render);
treeView=newJScrollPane(tree);
//topPanel.add(tree);
this.add(treeView);
tree.addMouseListener(ml);
}catch(Exceptione){
e.printStackTrace();
}
}
publicJTreecreateTree(InputStreamis){
SAXBuilderbuilder=newSAXBuilder();
try{
Documentdoc=builder.build(is);
Elementroot=doc.getRootElement();
TreeNoderootNode=new
TreeNode(root.getAttributeValue("id"),root.getAttributeValue("name"),root.getAttributeValue("HaveChildren"));
top=newDefaultMutableTreeNode(rootNode);
addNode(root,top);
}catch(Exceptionex){
ex.printStackTrace();
}
//能够在这里改动jtree中连线的色彩
UIManager.put("Tree.hash",newColorUIResource(Color.red));
returnnewJTree(top);
}
/**
*
*@parame待到场树中的jdom元素
*@paramfatherNode树节点父亲节点
*/
privatevoidaddNode(Elemente,DefaultMutableTreeNodefatherNode){
try{
Iteratorit=e.getChildren().iterator();
if(!it.hasNext())
return;
while(it.hasNext()){
Elementsub=(Element)it.next();
Stringid=newString(sub.getAttributeValue("id").getBytes(),"GB2312");
Stringname=newString(sub.getAttributeValue("name").getBytes(),"GB2312");
Stringlink=newString(sub.getAttributeValue("HaveChildren").getBytes(),"GB2312");
System.out.println(id);
System.out.println(name);
System.out.println(link);
TreeNodetempNode=newTreeNode(id,name,link);
DefaultMutableTreeNodenode=newDefaultMutableTreeNode(tempNode);
fatherNode.add(node);
if(link.equals("true")){
System.out.println("true~!equaltest");
addNode(sub,node);
}
}
}
catch(Exceptionexp)
{
System.out.println("encodingfail");
}
}
/**
*依据id,查找树节点,//广度优先
*@paramid节点id
*@paramrootNode树根节点
*@returnDefaultMutableTreeNode
*/
privateDefaultMutableTreeNodegetTreeNode(Stringid,DefaultMutableTreeNoderootNode){
DefaultMutableTreeNodereturnNode=null;
if(rootNode!=null){
Enumerationenum=rootNode.breadthFirstEnumeration();
while(enum.hasMoreElements()){
DefaultMutableTreeNodetemp=(DefaultMutableTreeNode)enum.nextElement();
TreeNodenode=(TreeNode)temp.getUserObject();
if(node.getId().equals(id)){
returnNode=temp;
break;
}
}
}
returnreturnNode;
}
publicvoidvalueChanged(TreeSelectionEventevent){
if(event.getSource()==tree){
path=event.getPath();
clicknode=(DefaultMutableTreeNode)path.getLastPathComponent();
Objectuo=clicknode.getUserObject();
if(uoinstanceofTreeNode){
TreeNodend=(TreeNode)clicknode.getUserObject();
link=nd.getLink();
}
}
}
publicstaticvoidmain(String[]args){
JFrameframe1=newJFrame("test");
AppletTreetree=newAppletTree();
tree.init();
frame1.getContentPane().add(tree);
frame1.setSize(600,600);
frame1.show();
frame1.addWindowListener(newMyWindowListener());
}
}
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。
作者:
爱飞
时间:
2015-1-21 12:57
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
不帅
时间:
2015-1-29 06:14
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者:
蒙在股里
时间:
2015-1-29 10:19
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
海妖
时间:
2015-1-30 10:33
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者:
精灵巫婆
时间:
2015-2-2 21:40
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
山那边是海
时间:
2015-2-3 22:54
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
冷月葬花魂
时间:
2015-2-4 08:53
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
飘灵儿
时间:
2015-2-9 20:51
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者:
变相怪杰
时间:
2015-2-18 15:51
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者:
小魔女
时间:
2015-3-6 08:36
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
只想知道
时间:
2015-3-7 00:40
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
分手快乐
时间:
2015-3-8 02:37
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者:
活着的死人
时间:
2015-3-15 19:53
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
admin
时间:
2015-3-17 01:26
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
飘飘悠悠
时间:
2015-3-18 22:34
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
再见西城
时间:
2015-3-19 16:36
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
仓酷云
时间:
2015-3-28 21:25
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
灵魂腐蚀
时间:
2015-3-31 07:04
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者:
透明
时间:
2015-4-6 21:08
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2