JTree如何选中一个结点的问题!!!

hccpro 2004-01-15 12:30:22
当删除最末层某一结点,我要选中其parent结点,但除root可以选中外,其它
结点都无法选中。

此时JTree已展开到要被选中的结点,我如下调用:(n是要被选中的结点)

TreeNode[] nodes = treeModel.getPathToRoot(n);
TreePath path = new TreePath(nodes);
int i = tree.getRowForPath(path); <---- i 总得到-1,但path变量内容正确
tree.setSelectionInterval(i, i);

最后两行换成tree.setSelectionPath(path);也没选中那个结点。

我在之前无论怎样调用tree.reload(); tree.makeVisiable(); tree.expandPath()都没用


我这个JTree大概有4、5层,设置有自己的TreeCellRenderer

有相应的TreeSelectionListener


非常着急,肯切大家指正到底哪地方用错了。

分不够可以再加
...全文
343 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hccpro 2004-01-17
  • 打赏
  • 举报
回复
totodo(土豆仙) 兄的链接也看过,稍微修改那个例子是可以实现选中parent结点的。

关键问题是我现在的代码却无法实现。

我又仔细检视了几遍代码,发现在一个刷新树的方法里有
treeModel = (DefaultTreeModel)tree.getModel();
这样重新赋值现有的treeModel是否会导致原model中取得的DefaultMutableTreeNode失效?

另外还有如下赋值:
setRoot(....),这是否也会导致原model内容变化?
stonecsdn 2004-01-17
  • 打赏
  • 举报
回复
学习
老土豆T 2004-01-17
  • 打赏
  • 举报
回复
代码没细看。长,

查看这个吧,肯定对你有帮助,是可以的。http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
hccpro 2004-01-16
  • 打赏
  • 举报
回复
没找到其它相关的帖子。


楼上的方法我试试,但感觉功能上差不多。

如果搞定必给分!
hccpro 2004-01-16
  • 打赏
  • 举报
回复
不行,不好使,netcobol(初学者)兄的方法只是相应选择事件并执行某些功能。


我目前的树采用DefaultTreeModel做model,我把要删除结点(DefaultMutableTreeNode类型)

parent保持到Hashtable中,删除结点后从Hashtable中取出parent,然后通过DefaultTreeModel

的方法得到TreePath,然后选择此TreePath,但不起作用。

我分析发现结点删除后Hashtable中保存的parent没有更新,里面还有删除节点的信息,所以

使用该节点无法操作成功,估计问题就出在这。

但是我怎么让parent同步更新?调用tree.reload()也没用。
Leemaasn 2004-01-16
  • 打赏
  • 举报
回复
试试看
netcobol(初学者)
的方法吧。。。


应该是可以的。

stevenjzj 2004-01-16
  • 打赏
  • 举报
回复
up
YuLimin 2004-01-15
  • 打赏
  • 举报
回复
<---- i 总得到-1,但path变量内容正确???
netcobol 2004-01-15
  • 打赏
  • 举报
回复
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();
}
tiger_wkh52741 2004-01-15
  • 打赏
  • 举报
回复
前几天有人讨论过这个问题,何不去搜索一下.节省楼主的时间和分数!
目录 目录 1 (一) Spring 开发 Swing GUI 简介——依赖注入和富客户机 5 关于本教程 5 前提条件 6 Spring 和依赖注入概述 7 什么是 Spring 框架? 7 什么是依赖注入? 7 环境设置 7 选择编译环境 7 设置 Ant 8 通过 Ant 自动下载依赖软件 10 设置 Maven 10 通过 Maven 自动下载依赖软件 12 设置 Eclipse 13 下载依赖的 JAR 文件并在 Eclipse 的 classpath 中定义这种依赖性 15 创建 to-do 列表:基本的 Swing 和 Spring 应用程序设置 17 创建 MainFrame、Launcher 和 ToDo 类 17 创建 Spring app-context.xml bean 定义文件 19 运行应用程序 20 定义 bean 属性 21 创建 to-do 列表:创建一个可重用组件并在表中显示数据 23 创建一个可重用的面板 23 将 bean 组合在一起 24 添加一个表并重用这个面板 26 定义表模型 28 显示列表中的项 29 创建 to-do 列表:完成 —— 按钮和监听程序 31 创建按钮和监听程序 32 组合按钮和监听程序 35 Spring Rich Client Project 37 Spring Rich Client Project 概述 37 结束语 38 (二) 适用于各类Swing应用的通用数据验证模块 39 项目创建好后,加入类库: 41 然后写一个persistence bean: 41 Java代码 41 我称这个类为HibernateValidationUI,代码如下: 43 Java代码 43 类中用到的Java2DIconFactory代码如下: 47 Java代码 47 Factory类 49 Java代码 49 最后,我们可以编写一个Demo application来看看效果如何,代码如下: 51 Java代码 51 总结: 55 (三) 对JTree从创建到使用详解 56 (四) JTree的使用方法 57 JTreeDemo.java源程序 57 经验汇总 60 1. 初始化 60 2. 三个经常使用的取值函数 60 3. 根据node得到path: 60 4. 根据Path展开到该节点 60 5. 根据path设定该节点选定 61 6. 选中节点的方法 61 7. 滚动到可见位置 61 8. 给JTree添加右键弹出菜单 61 9. 关于JTree的展开 61 10. 如何遍历JTree 62 (五) JTree右键菜单实现编辑、添加、删除节点 63 Test.java源代码 63 (六) 功能齐全的JTree例子 66 TreeEditTest.java源代码 66 (七) JTree控件的使用 70 构造函数: 70 TreeModel接口 70 DefaultTreeModel缺省版本 71 TreeNode接口 71 TreeExpansionListener接口 71 TreeCellRenderer 72 例子: 73 (八) 如何为JTree添加右键菜单? 75 (九) 如何使JTextArea随着窗体的变化自动调整大小 76 TextAreaTest源代码 76 (十) JAVA swing编程JTree实现系统目录 77 FileTree1.java源代码 77 (十一) Java Swing中的JTree模型 85 Swing.tree包中的主要类名称实现 85 1. 构建树模型 86 2. 树结点 86 树结构详细类图 86 2.1 TreeNode接口 86 2.2 MutableTreeNode接口 87 2.3 DefaultMutableTreeNode类 88 3. 编辑树 88 3.1获得结点路径 88 3.2编辑结点 88 3.3视图显示 89 4. 查找树 89 5. 绘制结点 90 (十二) JTree鼠标左键的双击事件选用那个监听器 91 MouseDemo.java源代码 92 (十三) JTree 92 JTree的构造函数: 93 JTreeDefaultDemo.java源代码 93 (十四) JTree 应用 96 Frame1.java源代码 96 MyDefaultTreeCellRenderer.java源代码 98 (十五) JTree控件 100 树和节点的基本概念 100 有关树JTree的类和接口 100 代码实例:构建一棵树 101 相关语句解释 101 (十六) JTree应用示例——文件路径 103 AnimatedIconTreeExample.java源代码 103 //内部类NodeImageObserver.java源代码 105 //IconNodeRenderer.java源代码 106 //IconNode.java源代码 107 (十七) Swing 学习笔记 108 Swing API 包括18个公共包: 108 例程1.1 HelloWorldSwing.java 109 例程2.2 HelloWorldJFrame.java 110 (十八) 动态加载文件树的java程序 111 FileSystemTree.java源代码 112 //内部类 TreeWillExpandListenerImp.java 114 (十九) 向 Java 应用程序伸出援助之手——用 JavaHelp 2.0 构建下一个 Java 应用程序的帮助系统 115 入门 116 使用 HelpSet 117 HelpSet 数据文件 118 helpset 文件 118 maps 部分 119 view 部分 119 presentation 部分 120 implementation 部分 121 map 文件 121 导航文件 121 TOC 122 Index 122 Glossary 123 Favorites 123 主题文件 123 在 Java 应用程序中调用 JavaHelp 124 自定义外观 125 配置图标 125 基于文字的标签还是基于图像的标签? 125 要工具栏还是不要工具栏? 125 设置字体 126 使用展示窗口 127 标签 128 四种 activator 129 添加内容敏感的帮助 130 窗口级帮助 131 字段级帮助 131 屏幕级帮助 133 添加嵌入帮助 135 添加搜索功能 136 停用词 137 自定义停用词列表 137 合并 helpset 138 静态和动态合并 139 添加轻量级组件 141 基于服务器的帮助 144 设置 144 JavaHelp 服务器 bean 144 JavaScript 文件 145 JSP 文件 145 测试服务器端帮助 148 结束语 149

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧