swing jTree 绑定数据库后的节点刷新问题

2014-11-24 03:26:37 · 作者: · 浏览: 0

昨天尝试了让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、在其它地方添加调用上述方法的程序即可。本程序可实现树结构的实时刷新。