JTree如何选中一个结点的问题!!! <---- i 总得到-1,但path变量内容正确??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package com.hhj.examples;import javax.swing.event.TreeSelectionListener;import javax.swing.event.TreeSelectionEvent;import javax.swing.tree.TreePath;import javax.swing.tree.DefaultMutableTreeNode;import java.util.HashSet;import java.util.Set;import java.util.Iterator;import com.hhj.examples.util.DBUtil;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.ResultSet;import java.util.ArrayList;import com.hhj.examples.table.ResultsModel;import javax.swing.BorderFactory;import java.awt.Color;import javax.swing.border.TitledBorder;public class DataSourceTreeSelectionListener implements TreeSelectionListener { public DataSourceTreeSelectionListener(DatabaseBrowse browser) { this.browser = browser; } public void valueChanged(TreeSelectionEvent tree) { TreePath[] paths = this.browser.getDbTree().getSelectionPaths(); if (paths == null || paths.length == 0) return; boolean tableSelected = false; String column; String table; String columnsParam = null; String tableParam = null; String message = null; String executeSQL = null; for (int j = 0; j < paths.length; j++) { switch (paths[j].getPathCount()) { case 2: scheme = (String) ( ( (DefaultMutableTreeNode) (paths[j]. getPathComponent(1))).getUserObject()); System.out.println(scheme); this.columns.clear(); break; case 3: if (scheme == null) return; tableParam = (String) ( ( (DefaultMutableTreeNode) (paths[j]. getPathComponent(2))).getUserObject()); columnsParam = "*"; tableSelected = true; message = "Complete " + scheme + "." + tableParam + " table displayed!"; executeSQL = "Select * from " + scheme + "." + tableParam; this.columns.clear(); break; case 4: if (scheme == null) return; table = (String) ( ( (DefaultMutableTreeNode) (paths[j]. getPathComponent(2))).getUserObject()); if (tableParam == null) tableParam = table; column = (String) ( ( (DefaultMutableTreeNode) (paths[j]. getPathComponent(3))).getUserObject()); this.columns.add(column); Iterator iterator = this.columns.iterator(); boolean first = true; while (iterator.hasNext()) { if (first) { columnsParam = iterator.next() + ""; first = false; } else { columnsParam += "," + iterator.next(); } } tableSelected = true; executeSQL = "Select " + columnsParam + " from " + this.scheme + "." + tableParam; message = "Complete " + columnsParam + " dispalyed from " + this.scheme + "." + tableParam + " table!"; break; } if (tableSelected) { try { this.execute(executeSQL, tableParam); } catch (SQLException ex) { System.out.println("Waring!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1"); this.browser.getStatus().setText(ex.getErrorCode() + ":" + ex.getMessage()); return; } this.browser.getTablePane().setBorder( BorderFactory.createTitledBorder( BorderFactory.createLineBorder(Color.darkGray), tableParam, TitledBorder.CENTER, TitledBorder.DEFAULT_POSITION )); this.browser.getStatus().setText(message); } } System.out.println("tree changed!"); } private void execute(String sql, String tableName) throws SQLException { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; ArrayList columnNames = new ArrayList(); Iterator iterator = this.columns.iterator(); try { conn = DBUtil.getConnection(this.browser.getDrive(), this.browser.getUrl(), this.browser.getUserID(), this.browser.getPassword()); //Get all the columns for the current table ResultSet columnRs = conn.getMetaData().getColumns(null, null, tableName, null); if (this.columns.size() == 0) { while (columnRs.next()) { columnNames.add(columnRs.getString("COLUMN_NAME")); } } else { while (iterator.hasNext()) { columnNames.add(iterator.next()); } } if (columnNames.isEmpty()) return; columnNames.add(0,"INDEX"); this.model.setColumnNames( (String[]) columnNames.toArray(new String[columnNames.size()])); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); this.model.setResultSet(rs); this.browser.getTable().setModel(this.model); } catch (ClassNotFoundException ex) { ex.printStackTrace(); this.browser.getStatus().setText(ex.getMessage()); } finally { DBUtil.freeConnection(conn); } } private DatabaseBrowse browser; private Set columns = new HashSet(); private String scheme = null; private ResultsModel model = new ResultsModel();} 试试看 netcobol(初学者)的方法吧应该是可以的。 不行,不好使,netcobol(初学者)兄的方法只是相应选择事件并执行某些功能。我目前的树采用DefaultTreeModel做model,我把要删除结点(DefaultMutableTreeNode类型)parent保持到Hashtable中,删除结点后从Hashtable中取出parent,然后通过DefaultTreeModel的方法得到TreePath,然后选择此TreePath,但不起作用。我分析发现结点删除后Hashtable中保存的parent没有更新,里面还有删除节点的信息,所以使用该节点无法操作成功,估计问题就出在这。但是我怎么让parent同步更新?调用tree.reload()也没用。 代码没细看。长,查看这个吧,肯定对你有帮助,是可以的。http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html totodo(土豆仙) 兄的链接也看过,稍微修改那个例子是可以实现选中parent结点的。关键问题是我现在的代码却无法实现。我又仔细检视了几遍代码,发现在一个刷新树的方法里有treeModel = (DefaultTreeModel)tree.getModel();这样重新赋值现有的treeModel是否会导致原model中取得的DefaultMutableTreeNode失效?另外还有如下赋值:setRoot(....),这是否也会导致原model内容变化? java 界面编程 救助!! 求助 java 实现 CRC16的算法 JBUTTON本身已经设置成透明,我想让加在JBUTTON里的图片的背景也透明,要如何做到?请帮忙解决下,感激不尽! help 函数调用 一个小程序的问题(关于byte型计算) Java继承时构造函数的调用 如何使上传图像等比例缩小?UP有分 如何查网卡的MAC地址 大家看看我理解的散列冲突对吗? java中clone对象会调用构造方法吗 helloworld就没搞定,高人们帮忙看看 现在是2004年刚开始,祝大家新年快乐!
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreePath;
import javax.swing.tree.DefaultMutableTreeNode;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;
import com.hhj.examples.util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.hhj.examples.table.ResultsModel;
import javax.swing.BorderFactory;
import java.awt.Color;
import javax.swing.border.TitledBorder;public class DataSourceTreeSelectionListener implements TreeSelectionListener {
public DataSourceTreeSelectionListener(DatabaseBrowse browser) {
this.browser = browser;
} public void valueChanged(TreeSelectionEvent tree) {
TreePath[] paths = this.browser.getDbTree().getSelectionPaths();
if (paths == null || paths.length == 0)
return;
boolean tableSelected = false;
String column;
String table;
String columnsParam = null;
String tableParam = null; String message = null;
String executeSQL = null; for (int j = 0; j < paths.length; j++) {
switch (paths[j].getPathCount()) {
case 2:
scheme = (String) ( ( (DefaultMutableTreeNode) (paths[j].
getPathComponent(1))).getUserObject());
System.out.println(scheme);
this.columns.clear();
break;
case 3:
if (scheme == null)
return;
tableParam = (String) ( ( (DefaultMutableTreeNode) (paths[j].
getPathComponent(2))).getUserObject());
columnsParam = "*";
tableSelected = true;
message = "Complete " + scheme + "." + tableParam +
" table displayed!";
executeSQL = "Select * from " + scheme + "." + tableParam;
this.columns.clear();
break;
case 4:
if (scheme == null)
return;
table = (String) ( ( (DefaultMutableTreeNode) (paths[j].
getPathComponent(2))).getUserObject());
if (tableParam == null)
tableParam = table; column = (String) ( ( (DefaultMutableTreeNode) (paths[j].
getPathComponent(3))).getUserObject());
this.columns.add(column);
Iterator iterator = this.columns.iterator();
boolean first = true;
while (iterator.hasNext()) {
if (first) {
columnsParam = iterator.next() + "";
first = false;
} else {
columnsParam += "," + iterator.next();
}
}
tableSelected = true;
executeSQL = "Select " + columnsParam + " from " +
this.scheme + "." + tableParam;
message = "Complete " + columnsParam + " dispalyed from " +
this.scheme + "." + tableParam + " table!";
break;
}
if (tableSelected) {
try {
this.execute(executeSQL, tableParam);
} catch (SQLException ex) {
System.out.println("Waring!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1");
this.browser.getStatus().setText(ex.getErrorCode() + ":" +
ex.getMessage());
return;
}
this.browser.getTablePane().setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.darkGray),
tableParam,
TitledBorder.CENTER,
TitledBorder.DEFAULT_POSITION
));
this.browser.getStatus().setText(message);
}
}
System.out.println("tree changed!");
} private void execute(String sql, String tableName) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
ArrayList columnNames = new ArrayList();
Iterator iterator = this.columns.iterator(); try {
conn = DBUtil.getConnection(this.browser.getDrive(),
this.browser.getUrl(),
this.browser.getUserID(),
this.browser.getPassword());
//Get all the columns for the current table
ResultSet columnRs = conn.getMetaData().getColumns(null, null,
tableName, null);
if (this.columns.size() == 0) {
while (columnRs.next()) {
columnNames.add(columnRs.getString("COLUMN_NAME"));
}
} else {
while (iterator.hasNext()) {
columnNames.add(iterator.next());
} }
if (columnNames.isEmpty())
return;
columnNames.add(0,"INDEX");
this.model.setColumnNames( (String[]) columnNames.toArray(new
String[columnNames.size()])); pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
this.model.setResultSet(rs);
this.browser.getTable().setModel(this.model);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
this.browser.getStatus().setText(ex.getMessage());
} finally {
DBUtil.freeConnection(conn);
} } private DatabaseBrowse browser;
private Set columns = new HashSet();
private String scheme = null;
private ResultsModel model = new ResultsModel();
}
netcobol(初学者)
的方法吧
应该是可以的。
我目前的树采用DefaultTreeModel做model,我把要删除结点(DefaultMutableTreeNode类型)parent保持到Hashtable中,删除结点后从Hashtable中取出parent,然后通过DefaultTreeModel的方法得到TreePath,然后选择此TreePath,但不起作用。我分析发现结点删除后Hashtable中保存的parent没有更新,里面还有删除节点的信息,所以使用该节点无法操作成功,估计问题就出在这。但是我怎么让parent同步更新?调用tree.reload()也没用。
treeModel = (DefaultTreeModel)tree.getModel();
这样重新赋值现有的treeModel是否会导致原model中取得的DefaultMutableTreeNode失效?另外还有如下赋值:
setRoot(....),这是否也会导致原model内容变化?