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();
}
}
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();
}
}