JTree用法大全汇总.docx

上传人:b****1 文档编号:2686125 上传时间:2023-05-04 格式:DOCX 页数:19 大小:23.39KB
下载 相关 举报
JTree用法大全汇总.docx_第1页
第1页 / 共19页
JTree用法大全汇总.docx_第2页
第2页 / 共19页
JTree用法大全汇总.docx_第3页
第3页 / 共19页
JTree用法大全汇总.docx_第4页
第4页 / 共19页
JTree用法大全汇总.docx_第5页
第5页 / 共19页
JTree用法大全汇总.docx_第6页
第6页 / 共19页
JTree用法大全汇总.docx_第7页
第7页 / 共19页
JTree用法大全汇总.docx_第8页
第8页 / 共19页
JTree用法大全汇总.docx_第9页
第9页 / 共19页
JTree用法大全汇总.docx_第10页
第10页 / 共19页
JTree用法大全汇总.docx_第11页
第11页 / 共19页
JTree用法大全汇总.docx_第12页
第12页 / 共19页
JTree用法大全汇总.docx_第13页
第13页 / 共19页
JTree用法大全汇总.docx_第14页
第14页 / 共19页
JTree用法大全汇总.docx_第15页
第15页 / 共19页
JTree用法大全汇总.docx_第16页
第16页 / 共19页
JTree用法大全汇总.docx_第17页
第17页 / 共19页
JTree用法大全汇总.docx_第18页
第18页 / 共19页
JTree用法大全汇总.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JTree用法大全汇总.docx

《JTree用法大全汇总.docx》由会员分享,可在线阅读,更多相关《JTree用法大全汇总.docx(19页珍藏版)》请在冰点文库上搜索。

JTree用法大全汇总.docx

JTree用法大全汇总

JTree用法

1。

自动展开树

packagetestpicturejava;

importjava.awt.*;

importjavax.swing.*;

importjavax.swing.tree.TreeNode;

importjavax.swing.tree.TreePath;

importjava.util.Enumeration;

publicclassJTreeFrameextendsJFrame{

   publicJTreeFrame(){

       try{

           jbInit();

       }catch(Exceptionexception){

           exception.printStackTrace();

       }

   }

   privatevoidjbInit()throwsException{

       getContentPane().setLayout(null);

       setSize(newDimension(434,347));

       setTitle("JTreeFrameTitle");

       jScrollPane1.setBounds(newRectangle(9,9,429,317));

       this.getContentPane().add(jScrollPane1);

       expandTree(jTree1);

       jScrollPane1.getViewport().add(jTree1);

   }

   /**    *完全展开一个JTree    *@paramtreeJTree    */

   publicstaticvoidexpandTree(JTreetree){

       TreeNoderoot=(TreeNode)tree.getModel().getRoot();

       expandAll(tree,newTreePath(root),true);

   }

   /**    *完全展开或关闭一个树,用于递规执行    *@paramtreeJTree    *@paramparent父节点    *@paramexpand为true则表示展开树,否则为关闭整棵树    */

   privatestaticvoidexpandAll(JTreetree,TreePathparent,booleanexpand){

       //Traversechildren

       TreeNodenode=(TreeNode)parent.

                       getLastPathComponent();

       if(node.getChildCount()>=0){

           for(Enumeratione=node.children();e.hasMoreElements();){

               TreeNoden=(TreeNode)e.nextElement();

               TreePathpath=parent.pathByAddingChild(n);

               expandAll(tree,path,expand);

           }

       }//Expansionorcollapsemustbedonebottom-up

       if(expand){

           tree.expandPath(parent);

       }else{

           tree.collapsePath(parent);

       }

   }

   JScrollPanejScrollPane1=newJScrollPane();

   JTreejTree1=newJTree();

}

2。

用最简便的方法更换JTREE图标

最近为一个程序写界面,需要更换JTree的默认图标,因为以前从没做过swing,走了不少弯路,现在把方法告诉大家,希望对你的工作能有所帮助.

    先来一个常见的图标更换方法,需要显示继承DefaultTreeCellRenderer类

privateclassMyRendererextendsDefaultTreeCellRenderer{

          ImageIconhtmlIcon;

          ImageIconimageIcon;

          publicMyRenderer(){

              htmlIcon=newImageIcon("source/html.gif");

              imageIcon=newImageIcon("source/image.gif");

          }

          publicComponentgetTreeCellRendererComponent(

                              JTreetree,

                              Objectvalue,

                              booleansel,

                              booleanexpanded,

                              booleanleaf,

                              introw,

                              booleanhasFocus){

              super.getTreeCellRendererComponent(

                              tree,value,sel,

                              expanded,leaf,row,

                              hasFocus);

              if(leaf&&isImage(value)){

                  setIcon(imageIcon);

                  //setToolTipText("ThisbookisintheTutorialseries.");

              }

              elseif(leaf){

                  setIcon(htmlIcon);

              }

              returnthis;

          }

          protectedbooleanisImage(Objectvalue){

              Sitemarks.SitemarkEntrynode=

                      (Sitemarks.SitemarkEntry)value;

              Stringname=

                      (String)(node.getName());

              if(name.endsWith(".jpg")||name.endsWith(".gif")){

                  returntrue;

              }

              returnfalse;

          }

      }

   实现起来太麻烦了,我只是想换个图标而已,java也太不讲人情了,需要写这么多代码.于是我尝试这样直接设置:

  JTreeleftTree=newJTree();

  ((DefaultTreeCellRenderer)leftTree.getCellRenderer()).setClosedIcon(myClosedIcon);

  这样的问题是,如果你需要动态增删JTree的结点,调用UpdateUI()方法后,显示的图标又变为默认的图标.你还得在调用updateUI()后重新调用上面语句.

  最后我想到使用匿名类的方法如下:

          leftTree.setCellRenderer(newDefaultTreeCellRenderer(){

                publicIcongetClosedIcon(){

                       //返回你需要的图标

                        return myClosedIcon                                                                                                                                   

                }

          });

 

3。

JTree使用经验总结

在实际开发过程中会经常使用JTree组件,平时会遇到这样或那样的问题,在此将偶得一点经验写下来,与大家共享,希望对大家有所帮助。

privateJTreejtNetDevice;//数组件申明

privateJScrollPanejspTree;//滚动面板申明

1、初始化

   DefaultMutableTreeNoderootNode=newDefaultMutableTreeNode("root");

   jtNetDevice=newJTree(rootNode);

   jtNetDevice.setAutoscrolls(true);

   getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置单选模式

   jspTree=newJScrollPane();

   jspTree.getViewport().add(jtNetDevice,null);

2、三个经常使用的取值函数

 privateDefaultTreeModelgetTreeModel(){

   return(DefaultTreeModel)jtNetDevice.getModel();

 }

 privateDefaultMutableTreeNodegetRootNode(){

   return(DefaultMutableTreeNode)getTreeModel().getRoot();

 }

  

 privateTreeSelectionModelgetTreeSelectionModel(){

   returnjtNetDevice.getSelectionModel();

 }

 

3、根据node得到path:

 TreePathvisiblePath=newTreePath(getTreeModel().getPathToRoot(node));

4、根据Path展开到该节点

 jtNetDevice.makeVisible(visiblePath);

5、根据path设定该节点选定

 jtNetDevice.setSelectionPath(visiblePath);

6、选中节点的方法

 首先,根据节点得到树路径,其中chosen为需要选中的节点

 TreePathvisiblePath=newTreePath(((DefaultTreeModel)jtNetDevice.getModel()).

                                       getPathToRoot(chosen));

 然后根据Path选中该节点

 jtNetDevice.setSelectionPath(visiblePath);

7、滚动到可见位置

 jtNetDevice.scrollPathToVisible(visiblePath);

8、给JTree添加右键弹出菜单

 voidjtNetDevice_mouseReleased(MouseEvente){

   if(e.isPopupTrigger()){

     jPopupMenu1.show(e.getComponent(),e.getX(),e.getY());//弹出右键菜单

   }

 }

9、关于JTree的展开

  //Ifexpandistrue,expandsallnodesinthetree.

  //Otherwise,collapsesallnodesinthetree.

  publicvoidexpandAll(JTreetree,booleanexpand){

      TreeNoderoot=(TreeNode)tree.getModel().getRoot();

   

      //Traversetreefromroot

      expandAll(tree,newTreePath(root),expand);

  }

  privatevoidexpandAll(JTreetree,TreePathparent,booleanexpand){

      //Traversechildren

      TreeNodenode=(TreeNode)parent.getLastPathComponent();

      if(node.getChildCount()>=0){

          for(Enumeratione=node.children();e.hasMoreElements();){

              TreeNoden=(TreeNode)e.nextElement();

              TreePathpath=parent.pathByAddingChild(n);

              expandAll(tree,path,expand);

          }

      }

   

      //Expansionorcollapsemustbedonebottom-up

      if(expand){

          tree.expandPath(parent);

      }else{

          tree.collapsePath(parent);

      }

  }

 

10、如何遍历JTree 

  // 创建树

  JTreetree=newJTree();

   

  //添加树节点......

   

  // 遍历所有节点

  visitAllNodes(tree);

   

  // 仅遍历展开的节点

  visitAllExpandedNodes(tree);

   

  //Traverseallnodesintree

  publicvoidvisitAllNodes(JTreetree){

      TreeNoderoot=(TreeNode)tree.getModel().getRoot();

      visitAllNodes(root);

  }

  publicvoidvisitAllNodes(TreeNodenode){

      //nodeisvisitedexactlyonce

      process(node);

   

      if(node.getChildCount()>=0){

          for(Enumeratione=node.children();e.hasMoreElements();){

              TreeNoden=(TreeNode)e.nextElement();

              visitAllNodes(n);

          }

      }

  }

   

  //Traverseallexpandednodesintree

  publicvoidvisitAllExpandedNodes(JTreetree){

      TreeNoderoot=(TreeNode)tree.getModel().getRoot();

      visitAllExpandedNodes(tree,newTreePath(root));

  }

  publicvoidvisitAllExpandedNodes(JTreetree,TreePathparent){

      //Returnifnodeisnotexpanded

      if(!

tree.isVisible(parent)){

          return;

      }

   

      //nodeisvisibleandisvisitedexactlyonce

      TreeNodenode=(TreeNode)parent.getLastPathComponent();

      process(node);

   

      //Visitallchildren

      if(node.getChildCount()>=0){

          for(Enumeratione=node.children();e.hasMoreElements();){

              TreeNoden=(TreeNode)e.nextElement();

              TreePathpath=parent.pathByAddingChild(n);

              visitAllExpandedNodes(tree,path);

          }

      }

  }

4。

JTree的事件监听

importjavax.swing.tree.*;

importjavax.swing.event.TreeSelectionEvent;

importjavax.swing.event.TreeSelectionListener;

使用流程:

1,JTreetree=createTree();//得到JTree对象,createTree()见文后

2,DefaultTreeCellRendererrender=newDefaultTreeCellRenderer();

 tagTree.setCellRenderer(render);//设置Tree的Render模式

3,thdTree.addTreeSelectionListener(

   newTreeSelectionListener()

   {

     publicvoidvalueChanged(TreeSelectionEvente){

     }

  }

 );//增加选中节点的监听器

privatevoidcreateTree()

{

   //一般构造方法

     JTreetree;

    DefaultMutableTreeNoderoot=newDefaultMutableTreeNode("Root");

     DefaultTreeModeltreeModel=newDefaultTreeModel(root);       

     root.setAllowsChildren(true);

    tree=newJTree(treeModel);

    DefaultTreeCellRenderertreeRender=new DefaultTreeCellRenderer();

    treeRender.setOpaque(true);

    tree.setCellRenderer(treeRender);

    ToolTipManager.sharedInstance().registerComponent(tree);

    tree.setName("tagTree");     

    returntree;

}

5。

使用jdom操作xml数据,生成含Jtree的applet 

关键词:

xml,jdom,applet,jtree

在我们工作中,常常会碰到树形组件的生成问题,如果你在开发web application,纯粹使用

javascript来生成树形组件是非常繁琐的,而且交互性也不不太好。

所以许多产品使applet来实现树形组件的功能。

比如说,weblogic,jboss等产品的console.所以,把树形数据组织成xml文件,用jdom剖析它,最后生成applet就非常有通用的意义。

下面,我就给出一个例子,抛砖引玉。

1.准备一个存有属性数据的xml文件,把它放在classpath中,我这里是org.xml。

[pre]

xml version="1.0" encoding="UTF-8"?

>

--Sample XML file generated by XMLSPY v5 rel. 3 U ([url][/url])-->

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2