100分请教:小弟KangTa问题:关于JTree树路径的问题!高手多帮忙! 存储的应该是[[[ages]name]authos],就是从ages到root的路径(如果authos是root的话) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 paths[]它会存储什么路径?这个路径是什么?不就是你选择的路径path吗,path[]应该是你选取的多个路径的path吧,不是很懂,帮你up一下 public void valueChanged(TreeSelectionEvent e){ TreePath[] paths=dbTree.getSelectionPaths(); if(paths==null) return; boolean tableSelected=false; String column; String table; String columnsParam=null; String tableParam=null; String message=null; for(int j=0;j<paths.length;j++) { switch(paths[j].getPathCount()) { case 2:那for(int j=0;j<paths.length;j++) 此时的paths.length是多少?还是以ages为例! 保存的是一条从根节点到你选择的节点的完整路径.TreePath[0]是根节点,TreePath[TreePath.lenght-1]是你点选的节点.保存的类型是树中的节点对象. paths.length是根节点到点选的节点的个数 paths[j].getPathCount()) 那此方法和下面的switch不就把从根接点到我选中的节点之间的所有节点都运行了下面的分支语句吗?下面的代码我没打出来,下面的分支是把他们从数据库中取出来。public void valueChanged(TreeSelectionEvent e){ TreePath[] paths=dbTree.getSelectionPaths(); if(paths==null) return; boolean tableSelected=false; String column; String table; String columnsParam=null; String tableParam=null; String message=null; for(int j=0;j<paths.length;j++) { switch(paths[j].getPathCount()) { case 2: tableParam=(String)(((DefaultMutableTreeNode)(paths[j].getPathComponent(1))).getUserObject()); columnsParam="*"; tableSelected=true; message="Complete "+tableParam+" table displayed"; break; case 3: table=(String)(((DefaultMutableTreeNode)(paths[j].getPathComponent(1))).getUserObject()); if(tableParam==null) tableParam=table; else if(tableParam!=table) break; column=(String)(((DefaultMutableTreeNode)(paths[j].getPathComponent(2))).getUserObject()); if(columnsParam==null) columnsParam=column; else columnsParam+=","+column; message=columnsParam+" displayed from "+tableParam+" table."; break; } if(tableSelected) break; } try { tableModel.setResultSet(statement.executeQuery("select "+columnsParam+" from "+tableParam)); tablePane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.darkGray),tableParam,TitledBorder.CENTER,TitledBorder.DEFAULT_POSITION)); } catch(SQLException sqle) { message="Slection event error\n"+sqle.getMessage(); System.err.println(message); } if(message!=null) status.setText(message);} 这是书中的程序,我看过按照你的数据库,运行后树如下:数据库A | 表authos--+--表authos字段1 | +--表authos字段2 表name----+--表name字段1 | +--表name字段2 表ages---- | 表emali---这些表和字段类型都是节点,你说的语句:TreePath[] paths=dbTree.getSelectionPaths();paths数组保存的是所先把节点的路径,比如:表authos的 paths = {库A,表authos};表authos字段1的 paths = {库A,表authos,表authos字段1};表authos字段2的 paths = {库A,表authos,表authos字段2};其它节点的以此为例。这个程序还有以下两个地方需要注意:1、case 2 的话是表示点击了表;case 3 的话昌表示点击了字段2、(paths[j].getPathComponent(1))这是是取paths数组里面的元素 那当我选中了AGES表时,这时候paths.length是多少? 上面已经列出来了:表authos的 paths = {库A,表authos};表authos字段1的 paths = {库A,表authos,表authos字段1};AGES表的道理和authos一样啊表是2,字段是3,这是求数组的长度啊 求解:我写的这个背包算法的java实现哪错了? 多线程问题 spring 事务管理的问题 ArrayList 的问题 [求助]2个关于流的问题 讨论几个关于连接数据库的问题 关于对THINKING IN JAVA 这本书的看法(讨论) 学《JAVA2核心技术》的教我用TXTPAD, 我在开始菜单中,可以启动weblogic6.1,但在jb5中就不行了,出现下面的情况..... 请问下面这个程序在jb中怎么运行? 请问我的java程序在绘制一个GIF时汉字全是方框,请问怎么解决?linux下,我起了X了 关于事件驱动,
不就是你选择的路径path吗,path[]应该是你选取的多个路径的path吧,
不是很懂,帮你up一下
{
TreePath[] paths=dbTree.getSelectionPaths();
if(paths==null)
return;
boolean tableSelected=false;
String column;
String table;
String columnsParam=null;
String tableParam=null;
String message=null;
for(int j=0;j<paths.length;j++)
{
switch(paths[j].getPathCount())
{
case 2:那for(int j=0;j<paths.length;j++) 此时的paths.length是多少?还是以ages为例!
TreePath[0]是根节点,TreePath[TreePath.lenght-1]是你点选的节点.
保存的类型是树中的节点对象.
paths.length是根节点到点选的节点的个数
public void valueChanged(TreeSelectionEvent e)
{
TreePath[] paths=dbTree.getSelectionPaths();
if(paths==null)
return;
boolean tableSelected=false;
String column;
String table;
String columnsParam=null;
String tableParam=null;
String message=null;
for(int j=0;j<paths.length;j++)
{
switch(paths[j].getPathCount())
{
case 2:
tableParam=(String)(((DefaultMutableTreeNode)(paths[j].getPathComponent(1))).getUserObject());
columnsParam="*";
tableSelected=true;
message="Complete "+tableParam+" table displayed";
break;
case 3:
table=(String)(((DefaultMutableTreeNode)(paths[j].getPathComponent(1))).getUserObject());
if(tableParam==null)
tableParam=table;
else if(tableParam!=table)
break;
column=(String)(((DefaultMutableTreeNode)(paths[j].getPathComponent(2))).getUserObject());
if(columnsParam==null)
columnsParam=column;
else
columnsParam+=","+column;
message=columnsParam+" displayed from "+tableParam+" table.";
break;
}
if(tableSelected)
break;
}
try
{
tableModel.setResultSet(statement.executeQuery("select "+columnsParam+" from "+tableParam));
tablePane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.darkGray),tableParam,TitledBorder.CENTER,TitledBorder.DEFAULT_POSITION));
}
catch(SQLException sqle)
{
message="Slection event error\n"+sqle.getMessage();
System.err.println(message);
}
if(message!=null)
status.setText(message);
}
按照你的数据库,运行后树如下:
数据库A
|
表authos--+--表authos字段1
| +--表authos字段2
表name----+--表name字段1
| +--表name字段2
表ages----
|
表emali---
这些表和字段类型都是节点,你说的语句:TreePath[] paths=dbTree.getSelectionPaths();
paths数组保存的是所先把节点的路径,比如:
表authos的 paths = {库A,表authos};
表authos字段1的 paths = {库A,表authos,表authos字段1};
表authos字段2的 paths = {库A,表authos,表authos字段2};
其它节点的以此为例。这个程序还有以下两个地方需要注意:
1、case 2 的话是表示点击了表;case 3 的话昌表示点击了字段
2、(paths[j].getPathComponent(1))这是是取paths数组里面的元素
表authos的 paths = {库A,表authos};
表authos字段1的 paths = {库A,表authos,表authos字段1};AGES表的道理和authos一样啊表是2,字段是3,这是求数组的长度啊