`
salever
  • 浏览: 255417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jface TreeViewer 设置选中

    博客分类:
  • RCP
阅读更多

    开发时总会用到JFace封装的各种Viewer,它们虽然很方便,但在一些特殊情境下就不一定好使,比如TreeViewer,假定要在初始化以后自动选中某个模型对应的节点。

   TreeViewer提供了一个API方法——setSelection(),用了感觉没什么效果,跟了一下发现在org.eclipse.jface.viewers.StructuredViewer .setSelection(ISelection selection, boolean reveal)中

	public void setSelection(ISelection selection, boolean reveal) {
		/**
		 * <p>
		 * If the new selection differs from the current selection the hook
		 * <code>updateSelection</code> is called.
		 * </p>
		 * <p>
		 * If <code>setSelection</code> is called from within
		 * <code>preserveSelection</code>, the call to
		 * <code>updateSelection</code> is delayed until the end of
		 * <code>preserveSelection</code>.
		 * </p>
		 * <p>
		 * Subclasses do not typically override this method, but implement
		 * <code>setSelectionToWidget</code> instead.
		 * </p>
		 */
		Control control = getControl();
		if (control == null || control.isDisposed()) {
			return;
		}
		if (!inChange) {
			setSelectionToWidget(selection, reveal);
			ISelection sel = getSelection(); //此处为null
			updateSelection(sel);
			firePostSelectionChanged(new SelectionChangedEvent(this, sel));
		} else {
			restoreSelection = false;
			setSelectionToWidget(selection, reveal);
		}
	}

 

ISelection sel = getSelection(); //此处为null

工作有点紧急,没有仔细跟踪,想着Tree本身有select()方法,绕一下先实现了再说。

 JFaeUtil类:

public class JFaceUtil {

	private JFaceUtil() {
	}

	/**
	 * Get the matching tree item.
	 * 
	 * Call {@link #getItemIndex(Tree, Object)}
	 * 
	 * @param tree
	 *            - Control
	 * @param obj
	 *            - the object data
	 * @return - if matching return the matching item, otherwise null.
	 */
	public static TreeItem getItem(Tree tree, Object obj) {
		int index = getItemIndex(tree, obj);
		if (index == -1) {
			return null;
		}
		return tree.getItem(index);
	}

	/**
	 * Get the matching tree item index.
	 * 
	 * @param tree
	 *            - Control
	 * @param obj
	 *            - the object data
	 * @return - if matching return the matching item index, otherwise -1.
	 */
	public static int getItemIndex(Tree tree, Object obj) {
		if (tree == null || obj == null) {
			return -1;
		}

		for (int index = 0; index < tree.getItemCount(); index++) {
			TreeItem item = tree.getItem(index);
			if (item.getData() == obj) {
				return index;
			}
		}
		return -1;
	}
}

 方法有点土,但还是实现了。不过这个选中不会触发TreeViewer的SelectionListener监听器,以及SelectionChangedListener,这些都需要自己去调用相关处理方法。

 

 

 

分享到:
评论
3 楼 salever 2011-06-28  
wuyufeixue 写道
setSelection() 是可以用的。应该是你设置的不对


确实可以 那会用错了
2 楼 wuyufeixue 2011-06-28  
setSelection() 是可以用的。应该是你设置的不对
1 楼 salever 2010-09-07  
后来又细细跟踪了代码,发现
  setSelectionToWidget(selection, reveal);  函数执行的有问题,应该是TreeViewer对应的Tree控件没有及时刷新出新的TreeItem,所以在
引用
org.eclipse.jface.viewers.StructuredViewer.findItem(Object element)
中就得不到对应的Item。

这里把修改后的代码也贴一下,应该就可以了。

TreeViewer treeViewer = ....;
......
treeViewer.refresh();
StructuredSelection s = new StructuredSelection(obj);
treeViewer.setSelection(s, true);

这个方法会触发SelectionChangedEvent,但好像不会触发SelectionEvent

相关推荐

    Eclipse SWT/Jface环境设置 DOC文件

    在"Eclipse SWT Jface环境设置.doc"文档中,可能会涵盖如何在Eclipse环境中配置SWT和JFace的开发环境,包括安装必要的插件、创建新项目、导入库、设置构建路径以及编写示例代码等步骤。这个文档对于初学者或准备使用...

    jface treeView 的sample

    在jFace中,`TreeView`是通过`org.eclipse.jface.viewers.TreeViewer`类来实现的。创建一个`TreeViewer`需要一个父容器,通常是 SWT(Standard Widget Toolkit)的`Composite`对象。你可以通过调用`TreeViewer`的...

    SWT TreeViewer实例

    TreeViewer是SWT中的一个类,它封装了JFace Data Binding的支持,使得我们能够更方便地绑定数据到树形控件上。通过TreeViewer,我们可以创建具有多级节点、可选中状态、以及自定义列的树结构。 在`MyTreeViewer....

    org.eclipse.jface.rar

    1. **Viewers**:JFace提供了一种模型-视图-控制器(MVC)的实现,用于构建可定制的数据查看器,如TreeViewer和TableViewer。它们允许开发者以树形或表格形式展示数据,并提供了丰富的操作,如排序、过滤和编辑。 2...

    JFace一些资料

    **JFace技术详解** JFace是Eclipse框架中的一部分,它是构建用户界面(UI)的一种高级工具包。JFace的设计目标是提供一个面向对象的、与操作系统无关的接口,简化Swing和SWT(Standard Widget Toolkit)之间的开发...

    SWT/JFace专题 --- SWT/JFace概述

    3. 表格和树视图:如何使用TableViewer和TreeViewer来展示和操作结构化数据。 4. 模型-视图-控制器(MVC):解释MVC模式如何帮助保持代码的清晰性和可扩展性。 5. 对话框(Dialogs):介绍如何使用JFace提供的标准...

    JFace-TableTree的若干问题.doc

    在Java编程环境中,JFace库是Eclipse RCP(Rich Client Platform)的一部分,它提供了一套高级用户界面组件,如TableViewer和TreeViewer,用于构建桌面应用程序。在文档标题和描述中提到的问题主要涉及到JFace中的...

    SWT/JFace从入门到精通

    - 探索JFace:了解JFace如何简化SWT的使用,如利用TreeViewer和TableViewer展示数据。 - 练习MVC:通过创建一个简单的数据编辑视图,实践JFace的MVC模式。 - 扩展Eclipse:学习如何创建Eclipse插件,将SWT/JFace...

    hypersnap

    ITEYE是一个知名的IT技术社区,博主“sukiyuki”分享的文章可能是关于如何利用Java的JFace库创建一个带有右键菜单的TreeViewer组件,并实现菜单的响应功能。JFace是Eclipse平台的一部分,用于构建图形用户界面(GUI...

    JFace 类包(3.14)

    7. ** Wizards and Pages**:JFace 的向导(Wizard)和页面(Pages)组件允许开发者创建复杂的多步骤用户界面,常用于设置向导或者文件导入/导出过程。 8. **Event Handling**:JFace 提供了一种基于观察者模式的...

    SWT/JFACE API

    5. **树和表控件**:JFace的`TreeViewer`和`TableViewer`提供了更高级别的抽象,用于展示和操作树形和表格数据,支持过滤、排序和拖放等功能。 6. **命令框架**:JFace的命令框架允许开发者定义和执行可扩展的用户...

    全面介绍SWT-JFace

    4. **表和树的数据视图**:JFace的TableViewer和TreeViewer提供了对表格和树形结构数据的高级支持,包括排序、过滤和分页等功能。 5. **视图和编辑器**:在Eclipse IDE中,JFace用于创建可复用的视图和编辑器组件,...

    JFace教程

    3. **引入库文件**:在项目的 build path 中添加 SWT 和 JFace 的库文件,这可以通过 Eclipse 的项目属性设置来完成。 4. **编写代码**:利用 JFace 提供的 API 编写界面代码。可以从简单的示例开始,逐步熟悉 ...

    JFace的源码,从官网下的

    2. **Viewers**:JFace的Viewer是一个通用的组件容器,它可以用来展示数据集合,比如TableViewer、TreeViewer等。Viewer提供了丰富的事件处理机制和扩展接口,方便自定义行为。 3. **Dialogs and Wizards**:JFace...

    swt/jface api帮助文档

    JFace的TableViewer和TreeViewer提供了一种更抽象的方式来操作这些组件,包括数据绑定和排序。 7. **JFace服务**:包括Dialog、WorkbenchWindow、Action、SelectionService等,它们简化了窗口、动作和选择事件的...

    jface 入门例子

    2. **Viewer Framework**:JFace的`TableViewer`和`TreeViewer`提供了强大的表格和树形视图管理,支持数据模型、过滤、排序等功能。例如,创建一个表格展示数据: ```java Table table = new Table(shell, SWT....

    SWT+JFace 源代码

    3. **表和树的视图**:JFace的TableViewer和TreeViewer类提供了丰富的表格和树形视图功能,支持排序、过滤和自定义列。 4. **对话框和页面**:JFace简化了创建各种对话框和向导页的过程,例如InputDialog、...

    swt/jface.jar

    标题中的"swt/jface.jar"是一个关键组件,它在Java开发环境中用于构建用户界面。SWT(Standard Widget Toolkit)是IBM开发的一个开源GUI库,它提供了与原生操作系统更紧密集成的图形用户界面控件。JFace是建立在SWT...

    swt_jface_celleditor

    开发者可以指定选项列表,同时也可以监听选中事件来响应用户的操作。 3. **FileDialog CellEditor**: 这种编辑样式允许用户通过打开一个文件对话框来选择文件。在TableViewer的单元格中,点击编辑时会弹出一个...

    SWT_JFace_in_action_jface_action_

    Action不仅包含了操作的执行代码,还可以设置状态,如是否启用、图标等,使得UI元素可以根据Action的状态动态更新。 书中可能涵盖了以下内容: 1. SWT基础:包括组件的创建、布局管理、事件处理等。 2. JFace入门...

Global site tag (gtag.js) - Google Analytics