关闭

网络中树型菜单实现方法及其效率研究 (代码3)

1803人阅读 评论(0) 收藏 举报
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.util.Date;
import java.lang.*;
import java.sql.*;
import java.net.*;
class Win extends JFrame implements TreeSelectionListener
{
 JTree tree;
 String select;       //sql语句  
 String num;          //存储节点的编号序列
 long children;       //得到这个节点的子女数
 JLabel timeshow;     //用于显示时间的
 boolean isopen;      //判断是否打开过
 boolean isfolde;     //判断是否是文件夹
// boolean URLable;     //判断是否能进行URL连接
    java.sql.Date then;  //分别用于计时的日期类
    java.sql.Date now;   //需要注意定义的形式,应为Date类在java.util包中和java.sql包中都有       
    Connection connection;
 Statement sql;      
 ResultSet rs;
 long ms;              //需要的时间
 public Win()
 {   
  Container con = getContentPane();
  Date then = new Date();  //创建对象
        Date now = new Date();  
  //树的初试化只建立一个根节点的树
  DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
     tree = new JTree(root);
     tree.addTreeSelectionListener(this);
     ////设置树一次只能选择一个节点
     tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
     JScrollPane scrollpane = new JScrollPane(tree);
     con.add(scrollpane);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setVisible(true);
     setBounds(80,80,300,300);
     con.validate();
     validate();
 }
 //事件处理机制
 public void valueChanged(TreeSelectionEvent e)
 {
  DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
  this.setTitle(codeing(node,""));
        setnode(node);
 }
 //函数说明:  找到编码的结果,利用递归寻找
 //参数说明:  DefaultMutableTreeNode tempnode 为该节点的事例
 //            String save保存编码的结果的字符串
 //返回值说明:返回这个节点的编号
 public String codeing(DefaultMutableTreeNode tempnode,String save)
 {
  if (tempnode.getParent() != null)       //如果不为空的话,说明有父节点
  {
   DefaultMutableTreeNode nodeparent = (DefaultMutableTreeNode)tempnode.getParent();   //得到parent信息
            int i = nodeparent.getIndex((TreeNode)tempnode);    //得到在其父节点下的INDEX号
   i=i+1;             //
   save ="."+i+ save;
   return codeing(nodeparent,save);
  }
        else
        {
         return "0"+save;       //说明是树的根节点
        }
  
 }
 //函数说明:  和数据库连接查找的函数,实现动态单节点刷新的功能
 //参数说明:  DefaultMutableTreeNode tempnode为要刷新的节点
 //返回值说明:无返回值
 public void setnode(DefaultMutableTreeNode tempnode)     
 {
  String temp = new String(codeing(tempnode,""));       //得到这个节点的编码
  //建立JDBC-ODBC桥接器
  try
        {
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }
        catch(ClassNotFoundException e)
        {
         System.out.println("Exception1");
        }
        //
        try
        {
            connection = DriverManager.getConnection("jdbc:odbc:Treesource","","");
            sql = connection.createStatement();
            num = new String(temp);               //得到节点的编号         
            select = new String("SELECT * FROM NodeInfo WHERE NodeID = '"+num+"'");         
            isopened(num);               //判断是否打开该节点是否打开了
            if (isopen == false)         //还没有打开的话
            {
             //判断这个节点是否是文件夹节点
             isfolder(num);           //判断是否为文件夹节点
             if (isfolde == false){}    //不是文件夹节点,说明没有必要加节点             
             else                     //是文件夹节点的话,需要添加节点
             {
              long i;
                    long childrennum = findchildrennum(num);   //得到这个节点的子节点的数目
              //循环添加各个子节点
                  for (i = 1;i < childrennum+1;i++)    //注意编号!!!!
              {
               addchildren(tempnode,num,i);     //添加节点!!!!
              //  System.out.println(childrennum);  //debug
              //  System.out.println(i);
                  }
               // setopened(num);      //设置该节点的Opened为1
             }
            }
            connection.close();
        }
        catch(SQLException e1)
        {
         System.out.println("Exception2");
        } 
  
 }
 //函数功能:  用来判断是否已经打开了这个节点,ID为这个节点的编号
 //参数说明:  String ID本节点的ID号
 //返回值说明:无返回值
 public void isopened(String ID)    
 {
  try
  {
         rs = sql.executeQuery("SELECT Opened FROM NodeInfo WHERE NodeID = '"+ID+"'");   
            while(rs.next())
            {
             int i = rs.getInt("Opened");
          if (i == 1)    //如果这个节点已经打开了
          {
           isopen = true;
          }
          else                              //还没有打开过
          {
              isopen = false;                
          }
      }
  }
  catch(SQLException e2)
  {
   System.out.println("Exception3");
  }
 }
 //函数功能:  设置该节点的opened属性,
 //            把已经打开过并且添加过子节点的节点设置为已经打开过的属性
 //参数说明:  String ID为这个节点的ID号
 //返回值说明:无返回值
 public void setopened(String ID)
 {
  try
  {  
      //设置该节点的Opened值为打开过
      sql.executeUpdate("UPDATE NodeInfo SET Opened = "+"1"+ "WHERE NodeID = '"+ID+"'");
  }
  catch(SQLException e3)
  {
   System.out.println("Exception4");
  }
 }
 //函数功能:  判断是否为文件夹节点
 //参数说明:  String ID为这个节点的ID号
 //返回值说明:无返回值
 public void isfolder(String ID)
 {
  try
  {
         rs = sql.executeQuery("SELECT Folder FROM NodeInfo WHERE NodeID = '"+ID+"'");
         while(rs.next())
         {
             int i = rs.getInt("Folder");
          if (i == 1)    //如果这个节点是文件夹节点
          {
           isfolde = true;
          }
          else                              //如果不是文件夹节点
          {
              isfolde = false;                
          }
         }   
  }
  catch(SQLException e2)
  {
   System.out.println("Exception5");
  }
 } 
    //函数功能:  添加节点,每次只添加一个
    //参数说明:  DefaultMutableTreeNode parentNode以这个节点作为父节点来添加节点
    //            String ID 这个父节点的ID号
    //            long index 指明为第几个子节点
    //返回值说明:无返回值
 public void addchildren(DefaultMutableTreeNode parentNode,String ID,long index)
 {
  //节点的URL信息
  String link = new String("");
  link=getonechildID(ID,index);                      //得到一个索引号为INDEX的子节点
  parentNode.add(new DefaultMutableTreeNode(link));//为这个父节点添加一个子节点
 }
 //函数功能:  得到一个子女节点
 //参数说明:  ID为这个父节点的ID号
 //            index为这个子节点在以这个父节点为根的树中的索引号
 //返回值说明:String返回值为这个节点的ID号
 public String getonechildID(String ID,long index)
 {
  String temp = new String("");     //临时变量
  try
  {
   rs = sql.executeQuery("SELECT * FROM NodeInfo WHERE NodeID = '"+ID+"."+index+"'"); 
   while(rs.next())
   {
    temp = rs.getString("NodeID");//得到该节点的信息
   }               
  }
  catch(SQLException e3)
  {
   System.out.println("Exception6");
  }
     return temp;                 //返回这个子节点的信息
 }
 //函数功能:  得到节点的文本信息
 //参数说明:  ID为这个节点的ID号
 //            index这个子节点在以这个父节点为根的树中的索引号
 //返回值说明:String返回值为这个节点的ID号
 public String getonechildText(String ID,long index)
 {
  String temp = new String("");
  try
  {
   rs = sql.executeQuery("SELECT * FROM Text WHERE NodeID = '"+ID+"."+index+"'");
   while(rs.next())
   {
    temp = rs.getString("Text");
   }
  }
  catch(SQLException e4)
  {
   System.out.println("Exception7");
  }
  return temp;                 //返回这个子节点的信息
 }
/* //函数功能:  得到节点的文本信息
 //参数说明:  ID为这个节点的ID号
 //            index这个子节点在以这个父节点为根的树中的索引号
 //返回值说明:String返回值为这个节点的ID号
 public String getonechildIcon(String ID,long index)
 {
  String temp = new String("");
  try
  {
   rs = sql.executeQuery("SELECT * FROM Text WHERE NodeID = '"+ID+"."+index+"'");
   while(rs.next())
   {
    temp = rs.getString("Text");
   }
  }
  catch(SQLException e4)
  {
   System.out.println("Exception8");
  }  
 }*/
 //函数功能:  得到节点的URL
 //参数说明:  ID为这个节点的ID号
 //            index这个子节点在以这个父节点为根的树中的索引号
 //返回值说明:String返回值为这个节点的ID号
 public String getonechildURL(String ID,long index)
 {
  String temp = new String("");
  try
  {
   rs = sql.executeQuery("SELECT * FROM URL WHERE NodeID = '"+ID+"."+index+"'");
   while(rs.next())
   {
    temp = rs.getString("URL");
   }
  }
  catch(SQLException e4)
  {
   System.out.println("Exception9");
  }
  return temp;                 //返回这个子节点的信息
 }
 //函数功能:  得到这个父节点的子女的数量
 //参数说明:  ID为这个父节点的ID号
 //返回值说明:long返回该节点的子节点的数目
 public long findchildrennum(String ID)
 {
  long i=0;
  try
  { 
      //默认子节点的数量为0个
   rs = sql.executeQuery("SELECT Childnum FROM NodeInfo WHERE NodeID = '"+ID+"'");
   while(rs.next())
   {
     i = rs.getInt("Childnum");
   }
  }
  catch(SQLException e5)
  {
   System.out.println("Exception10");
  }
  return i;                     //从数据库得到这个节点的子女节点的数量
 }
}
public class TreeMenu
{
 public static void main(String args[])
 {
  Win win = new Win();
  JEditorPane jeditorpane = new JEditorPane();
 }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:145009次
    • 积分:2657
    • 等级:
    • 排名:第13660名
    • 原创:123篇
    • 转载:21篇
    • 译文:2篇
    • 评论:96条
    最新评论