昨天尝试了让jTree绑定数据库的方法。今天马上遇到另一个问题:如果我数据库的记录有变化,需要立即重新刷新jTree的所有节点 这该怎么办?经过尝试,这个小问题也解决了。
之前写的jTree绑定数据库,其基本思路是创建一个DefaultMutableTreeNode作为根节点,然后在它基础不断添加新节点。所以jTree的刷新,其实也就是先把根节点下所有子节点清空,然后再重新绑定一次即可。具体过程如下:
1、清空树的方法:
/*
* 清空树
*/
private void jMenuItem9ActionPerformed(java.awt.event.ActionEvent evt)
{
conn myconn = new conn();
myconn.updateDB("delete from tempDocFiles");// 删除数据库记录
JOptionPane.showMessageDialog(this, "文件列表清空成功!\n\r您可以继续上传文件。");
top.removeAllChildren();// 清除根节点的所有子节点
jTree1.updateUI();// 刷新树
}
2、对绑定树的方法进行一些修改:
/*
* 填充JTree
*/
public void showTree()
{
conn myconn = new conn();
ResultSet nodeRs;
ResultSet leafRs;
if (top.isLeaf() == false) //绑定之前 先查看根节点是否是叶子节点,如果是,说明此树是空的;如果不是,则说明此树此前已经被绑定有内容了,则将其子节点清除
top.removeAllChildren();
try
{
nodeRs = myconn
.queryDB("select distinct cType from tempDocFiles where position='"
+ this.position + "'");
leafRs = myconn
.queryDB("select cType,fileName from tempDocFiles where position='"
+ this.position + "'");
if (!nodeRs.next())
{
JOptionPane.showMessageDialog(this, "当前没有上传文件记录,请先上传文件!");
} else
{
nodeRs.beforeFirst();
while(nodeRs.next())
{
DefaultMutableTreeNode node = new DefaultMutableTreeNode(
nodeRs.getObject(1));
top.add(node);
while (leafRs.next())
{
if (leafRs.getObject(1).toString()
.equals(nodeRs.getObject(1)))
{
DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode(
leafRs.getObject(2));
node.add(leafnode);
}
}
top.add(node);
leafRs.beforeFirst();
}
jTree1.updateUI();
}
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3、在其它地方添加调用上述方法的程序即可。本程序可实现树结构的实时刷新。