开发时总会用到JFace封装的各种Viewer,它们虽然很方便,但在一些特殊情境下就不一定好使,比如TreeViewer,假定要在初始化以后自动选中某个模型对应的节点。
TreeViewer提供了一个API方法——setSelection(),用了感觉没什么效果,跟了一下发现在org.eclipse.jface.viewers.
.setSelection(
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,这些都需要自己去调用相关处理方法。
分享到:
相关推荐
在"Eclipse SWT Jface环境设置.doc"文档中,可能会涵盖如何在Eclipse环境中配置SWT和JFace的开发环境,包括安装必要的插件、创建新项目、导入库、设置构建路径以及编写示例代码等步骤。这个文档对于初学者或准备使用...
在jFace中,`TreeView`是通过`org.eclipse.jface.viewers.TreeViewer`类来实现的。创建一个`TreeViewer`需要一个父容器,通常是 SWT(Standard Widget Toolkit)的`Composite`对象。你可以通过调用`TreeViewer`的...
1. **Viewers**:JFace提供了一种模型-视图-控制器(MVC)的实现,用于构建可定制的数据查看器,如TreeViewer和TableViewer。它们允许开发者以树形或表格形式展示数据,并提供了丰富的操作,如排序、过滤和编辑。 2...
TreeViewer是SWT中的一个类,它封装了JFace Data Binding的支持,使得我们能够更方便地绑定数据到树形控件上。通过TreeViewer,我们可以创建具有多级节点、可选中状态、以及自定义列的树结构。 在`MyTreeViewer....
**JFace技术详解** JFace是Eclipse框架中的一部分,它是构建用户界面(UI)的一种高级工具包。JFace的设计目标是提供一个面向对象的、与操作系统无关的接口,简化Swing和SWT(Standard Widget Toolkit)之间的开发...
3. 表格和树视图:如何使用TableViewer和TreeViewer来展示和操作结构化数据。 4. 模型-视图-控制器(MVC):解释MVC模式如何帮助保持代码的清晰性和可扩展性。 5. 对话框(Dialogs):介绍如何使用JFace提供的标准...
- 探索JFace:了解JFace如何简化SWT的使用,如利用TreeViewer和TableViewer展示数据。 - 练习MVC:通过创建一个简单的数据编辑视图,实践JFace的MVC模式。 - 扩展Eclipse:学习如何创建Eclipse插件,将SWT/JFace...
ITEYE是一个知名的IT技术社区,博主“sukiyuki”分享的文章可能是关于如何利用Java的JFace库创建一个带有右键菜单的TreeViewer组件,并实现菜单的响应功能。JFace是Eclipse平台的一部分,用于构建图形用户界面(GUI...
7. ** Wizards and Pages**:JFace 的向导(Wizard)和页面(Pages)组件允许开发者创建复杂的多步骤用户界面,常用于设置向导或者文件导入/导出过程。 8. **Event Handling**:JFace 提供了一种基于观察者模式的...
5. **树和表控件**:JFace的`TreeViewer`和`TableViewer`提供了更高级别的抽象,用于展示和操作树形和表格数据,支持过滤、排序和拖放等功能。 6. **命令框架**:JFace的命令框架允许开发者定义和执行可扩展的用户...
4. **表和树的数据视图**:JFace的TableViewer和TreeViewer提供了对表格和树形结构数据的高级支持,包括排序、过滤和分页等功能。 5. **视图和编辑器**:在Eclipse IDE中,JFace用于创建可复用的视图和编辑器组件,...
3. **引入库文件**:在项目的 build path 中添加 SWT 和 JFace 的库文件,这可以通过 Eclipse 的项目属性设置来完成。 4. **编写代码**:利用 JFace 提供的 API 编写界面代码。可以从简单的示例开始,逐步熟悉 ...
2. **Viewers**:JFace的Viewer是一个通用的组件容器,它可以用来展示数据集合,比如TableViewer、TreeViewer等。Viewer提供了丰富的事件处理机制和扩展接口,方便自定义行为。 3. **Dialogs and Wizards**:JFace...
在Java编程环境中,JFace库是Eclipse RCP(Rich Client Platform)的一部分,它提供了一套高级用户界面组件,如TableViewer和TreeViewer,用于构建桌面应用程序。在文档标题和描述中提到的问题主要涉及到JFace中的...
JFace的TableViewer和TreeViewer提供了一种更抽象的方式来操作这些组件,包括数据绑定和排序。 7. **JFace服务**:包括Dialog、WorkbenchWindow、Action、SelectionService等,它们简化了窗口、动作和选择事件的...
2. **Viewer Framework**:JFace的`TableViewer`和`TreeViewer`提供了强大的表格和树形视图管理,支持数据模型、过滤、排序等功能。例如,创建一个表格展示数据: ```java Table table = new Table(shell, SWT....
3. **表和树的视图**:JFace的TableViewer和TreeViewer类提供了丰富的表格和树形视图功能,支持排序、过滤和自定义列。 4. **对话框和页面**:JFace简化了创建各种对话框和向导页的过程,例如InputDialog、...
标题中的"swt/jface.jar"是一个关键组件,它在Java开发环境中用于构建用户界面。SWT(Standard Widget Toolkit)是IBM开发的一个开源GUI库,它提供了与原生操作系统更紧密集成的图形用户界面控件。JFace是建立在SWT...
开发者可以指定选项列表,同时也可以监听选中事件来响应用户的操作。 3. **FileDialog CellEditor**: 这种编辑样式允许用户通过打开一个文件对话框来选择文件。在TableViewer的单元格中,点击编辑时会弹出一个...
Action不仅包含了操作的执行代码,还可以设置状态,如是否启用、图标等,使得UI元素可以根据Action的状态动态更新。 书中可能涵盖了以下内容: 1. SWT基础:包括组件的创建、布局管理、事件处理等。 2. JFace入门...