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

JFace Viewer 3

阅读更多
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

5.1.5. StructuredViewer

StructuredViewer 是列表查看器,表格查看器,树查看器的抽象超类。(参见Figure 5-7)

Figure 5-7. StructuredViewer 层次图


下列为通常使用的API:

addDoubleClickListener(IDoubleClickListener) 为查看器添加鼠标双击监听器。

addDragSupport(int, Transfer[], DragSourceListener) 为查看器添加支持拖元素的操作。

addDropSupport(int, Transfer[], DropTargetListener) 为查看器添加接收释放元素到其中的支持。

addFilter(ViewerFilter) 为查看器添加过滤器,并触发查看器重新过滤和排列元素。

addHelpListener(HelpListener) 为查看器添加对帮助请求的监听器。

addOpenListener(IOpenListener) 添加对选中元素进行打开操作的监听器。

addSelectionChangedListener(ISelectionChangedListener) 为查看器添加选择元素改变监听器。

addPostSelectionChangedListener(ISelectionChangedListener) 为查看器添加选择后事件监听器。

getSelection() 子类实现此方法,以IStructuredSelection接口返回选中的元素。

refresh() 刷新查看器。

refresh(boolean) 刷新查看器。参数表示是否刷新已存在元素的标签。

refresh(Object) 从指定元素开始刷新查看器。

refresh(Object, boolean) 从指定元素开始刷新查看器。参数表示是否刷新已存在元素的标签。

resetFilters() 清除过滤器,并触发查看器重新过滤和排列元素。

setComparer(IElementComparer) 设置比较器来进行元素比较,如果没有设置,则默认使用元素本身的equals 和 hashCode。

setContentProvider(IContentProvider) 本方法会校验内容供给器为 IStructuredContentProvider。

setData(String, Object) 设置属性和值,如果 Object设为null该属性将被删除。

setInput(Object) ContentViewer 实现了该方法,调用内容供给器的inputChanged方法,然后调用inputChanged 方法。 内容供给器getElements(Object) 随后将被调用,以Object作为输入参数,以决定查看器的根级元素。

setSelection(ISelection, boolean) StructuredViewer实现了该方法,设定查看器选中输入的元素。

setSorter(ViewerSorter) 设置查看器的排序器,并触发查看器重新过滤和排列元素。

setUseHashlookup(boolean) 设置是否在查看器中使用内部哈希表以提高元素和SWT部件的映射速度。

update(Object[], String[]) 更新指定元素的显示状态。

update(Object, String[])更新指定元素的显示状态。

5.1.6. ListViewer

ListViewer类 封装了List 控件,可以用来显示对象集合而不是字符串集合。列表查看器需要设置标签供给器和内容供给器。常用API包括:

add(Object) 为列表查看器加入指定元素。

add(Object[])为列表查看器加入指定元素。

getControl()返回该查看器的根源控件。

getElementAt(int) 根据指定位置返回相应的元素。

getList() 返回列表查看器的列表控件。

remove(Object) 删除列表查看器的指定元素。

remove(Object[]) 删除列表查看器的指定元素。

reveal(Object) 滚动查看器,保证指定元素被显示。

setLabelProvider(IBaseLabelProvider)列表查看器实现了该Viewer框架的方法,可以保证标签供给器为ILabelProvider

下面的域对象将用在以后的程序例子中。
public class Person {
   public String firstName = "John";
   public String lastName = "Doe";
   public int age = 37;
   public Person[] children = new Person[0];
   public Person parent = null;
   public Person(String firstName, String lastName,
      int age) {
      this.firstName = firstName;
      this.lastName = lastName;
      this.age = age;
   }
   public Person(String firstName, String lastName,
      int age, Person[] children) {
      this(firstName, lastName, age);
      this.children = children;
      for (int i = 0; i < children.length; i++) {
         children[i].parent = this;
      }
   }
   public static Person[] example() {
      return new Person[] {
         new Person("Dan", "Rubel", 41, new Person[] {
            new Person("Beth", "Rubel", 11),
            new Person("David", "Rubel", 6)}),
         new Person("Eric", "Clayberg", 42, new Person[] {
            new Person("Lauren", "Clayberg", 9),
            new Person("Lee", "Clayberg", 7)}),
         new Person("Mike", "Taylor", 55)
      };
   }
   public String toString() {
      return firstName + " " + lastName;
   }
}

下面的例子创建了一个列表查看器,并设置了标签供给器,内容供给器和排序器。 (参见 Figure 5-8) 注意: 要独立运行此程序, 你必须添加如下四项到你的Java Build Path (插件版本号要符合安装的Eclipse)。
ECLIPSE_HOME/plugins/org.eclipse.core.runtime_3.1.2.jar
ECLIPSE_HOME/plugins/org.eclipse.jface_3.1.1.jar
ECLIPSE_HOME/plugins/org.eclipse.jface.text_3.1.2.jar
ECLIPSE_HOME/plugins/org.eclipse.text_3.1.1.jar

import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class ListViewerExample {
   public static void main(String[] args) {
      Display display = new Display();
      Shell shell = new Shell(display);
      shell.setText("List Viewer Example");
      shell.setBounds(100, 100, 200, 100);
      shell.setLayout(new FillLayout());
      final ListViewer listViewer =
         new ListViewer(shell, SWT.SINGLE);
      listViewer.setLabelProvider(
         new PersonListLabelProvider());
      listViewer.setContentProvider(
         new ArrayContentProvider());
      listViewer.setInput(Person.example());
      listViewer.setSorter(new ViewerSorter() {
         public int compare(
            Viewer viewer, Object p1, Object p2) {
            return ((Person) p1).lastName
               .compareToIgnoreCase(((Person) p2).lastName);
         }
      });
      listViewer.addSelectionChangedListener(
         new ISelectionChangedListener() {
         public void selectionChanged(
            SelectionChangedEvent event) {
            IStructuredSelection selection =
               (IStructuredSelection) event.getSelection();
            System.out.println("Selected: "
               + selection.getFirstElement());
         }
      });
      listViewer.addDoubleClickListener(
         new IDoubleClickListener() {
         public void doubleClick(DoubleClickEvent event)
         {
            IStructuredSelection selection =
               (IStructuredSelection) event.getSelection();
            System.out.println("Double Clicked: " +
               selection.getFirstElement());
         }
      });
      shell.open();
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) display.sleep();
      }
      display.dispose();
   }
}

Figure 5-8. ListViewer example.


列表查看器创建后,使用 setLabelProvider() 方法设置标签供给器,使用setContentProvider() 设置内容供给器。 PersonListLabelProvider作为内容供给器, 返回由名字组成的文字标签,没有返回图标。该类程序如下:
public class PersonListLabelProvider extends LabelProvider {
   public Image getImage(Object element) {
      return null;
   }
   public String getText(Object element) {
      Person person = (Person) element;
      return person.firstName + " " + person.lastName;
   }
}

使用内建的 ArrayContentProvider最为内容供给器,它将输入的集合映射为数组。使用 setInput() 方法设置输入数据。排序器定义了compare()方法,它基于名字进行排序。最后,为列表查看器添加了selectionChanged 监听器和doubleClick监听器。

5.1.7. TableViewer

TableViewer 类封装了Table控件。表格查看器提供了可编辑的,垂直的,多列的条目列表。在列表中,每一个条目显示为一行单元格。每一个单元格显示了条目的相应属性。表格查看器需要配置标签供给器,内容供给器和列信息。 CheckboxTableViewer 加入了对个别条目泛灰的支持,还可以选中和反选与条目相关联的复选框。常用的API包括:

add(Object) 向表格查看器中加入指定的元素。当一个元素已经被加入到数据模型中,希望查看器能够准反映数据模型的时候,调用该方法。此方法只影响查看器,不影响数据模型。

add(Object[]) 向表格查看器中加入指定的元素。 当元素已经被加入到数据模型中,希望查看器能够准反映数据模型的时候,调用该方法。此方法只影响查看器,不影响数据模型。

cancelEditing() 取消当前起作用的单元格编辑器。

editElement(Object, int) 开始编辑指定元素。

getElementAt(int) 从表格查看器重获取指定序列号的元素。

getTable() 返回表格查看器的表格控件。

insert(Object, int) 在表格查看器的指定位置插入指定元素。

isCellEditorActive() 返回是否存在起作用的单元格编辑器。

remove(Object)从表格查看器重删除指定元素。当一个元素已经被从数据模型中删除,希望查看器能够准反映数据模型的时候,调用该方法。此方法只影响查看器,不影响数据模型。

remove(Object[]) 从表格查看器重删除指定元素。当元素已经被从数据模型中删除,希望查看器能够准反映数据模型的时候,调用该方法。此方法只影响查看器,不影响数据模型。

reveal(Object) 滚动查看器,保证指定元素被显示。

setCellEditors(CellEditor[])为表格查看器设置单元格编辑器。

setCellModifier(ICellModifier)为表格查看器设置单元格修改器。

setColumnProperties(String[]) 为表格查看器设置列属性。

setLabelProvider(IBaseLabelProvider) 表格查看器实现了Viewer 框架的此方法 保证输入的内容供给器是 ITableLabelProvider 或 ILabelProvider。

The CheckboxTableViewer 常用API包括:

addCheckStateListener(ICheckStateListener)为查看器添加选中状态改变监听器。

getChecked(Object)返回指定元素的选中状态。

getCheckedElements() 返回查看器中选中元素列表。

getGrayed(Object)返回指定元素的泛灰状态。

getGrayedElements() R返回查看器中泛灰元素列表。

setAllChecked(boolean) 设置所有元素是否被选中。

setAllGrayed(boolean) 设置所有元素是否泛灰。

setChecked(Object, boolean) 设置指定元素是否被选中。

setCheckedElements(Object[]) 设置指定元素被选中。

setGrayed(Object, boolean) 设置指定元素是否泛灰。

setGrayedElements(Object[]) 设置指定元素泛灰。

下面的程序样例创建一个拥有四列的表格查看器。 (参见Figure 5-9)。
Figure 5-9. TableViewer 样例


import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class TableViewerExample {
   public static void main(String[] args) {
      Display display = new Display();
      Shell shell = new Shell(display);
      shell.setText("Table Viewer Example");
      shell.setBounds(100, 100, 325, 200);
      shell.setLayout(new FillLayout());

      final TableViewer tableViewer = new TableViewer(
         shell, SWT.SINGLE | SWT.FULL_SELECTION);
      final Table table = tableViewer.getTable();
      table.setHeaderVisible(true);
      table.setLinesVisible(true);

      String[] columnNames = new String[] {
         "First Name", "Last Name", "Age", "Num Children"};
      int[] columnWidths = new int[] {
         100, 100, 35, 75};
      int[] columnAlignments = new int[] {
         SWT.LEFT, SWT.LEFT, SWT.CENTER, SWT.CENTER};
      for (int i = 0; i < columnNames.length; i++) {
         TableColumn tableColumn =
            new TableColumn(table, columnAlignments[i]);
         tableColumn.setText(columnNames[i]);
         tableColumn.setWidth(columnWidths[i]);
      }

      tableViewer.setLabelProvider(
         new PersonTableLabelProvider());
      tableViewer.setContentProvider(
         new ArrayContentProvider());
      tableViewer.setInput(Person.example());

      shell.open();
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) display.sleep();
      }
      display.dispose();
   }
}

创建表格查看器后,调用setHeaderVisible() 和 setLinesVisible() 方法使列表头可见,表格线可见。然后加入四列的信息。通过setText() 和 setWidth() 方法设置列表头的文字和宽度。(参见 7.8 节, 自动调整表格列)。 使用 setLabelProvider()方法设置标签供给器, 使用setContentProvider() 方法设置内容供给器。标签供给器PersonTableLabelProvider, 用来返回表格每一列的文字标签,没有返回图标。 程序如下:
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.*;

public class PersonTableLabelProvider
   extends LabelProvider
   implements ITableLabelProvider {
   public Image getColumnImage(
      Object element, int) {
       return null;
   }
   public String getColumnText(Object element, int index) {
      Person person = (Person) element;
      switch (index) {
         case 0 :
            return person.firstName;
         case 1 :
            return person.lastName;
         case 2 :
            return Integer.toString(person.age);
         case 3 :
            return Integer.toString(person.children.length);
         default :
            return "unknown " + index;
      }
   }
}

分享到:
评论

相关推荐

    JFace-viewer

    **JFace Viewer 知识点详解** 在Java开发领域,特别是使用Eclipse RCP(Rich Client Platform)进行桌面应用开发时,JFace是不可或缺的一部分。JFace是SWT(Standard Widget Toolkit)的一个扩展,提供了更高级别的...

    JFace 类包(3.14)

    3. **Data Binding**:JFace 数据绑定是将模型数据与UI元素直接关联的一种机制,它减少了手动更新界面的代码。通过IDataBindingService,开发者可以轻松地实现模型和控件之间的双向数据同步。 4. **Command ...

    SWT GridViewer_1.0包

    SWT GridViewer_1.0包是针对Java开发者的一个组件库,主要包含了两个核心的JAR文件:`org.eclipse.nebula.jface.gridviewer_1.0.0.jar`和`org.eclipse.nebula.widgets.grid_1.0.0.jar`。这两个文件提供了强大的数据...

    JFace一些资料

    2. **Viewer**:JFace中的Viewer是用于展示数据的组件,它可以是表、树或其他形式。Viewer提供了数据管理、排序、过滤等功能,并能与 SWT 控件如Table、Tree等无缝集成。 3. **Dialogs and Wizards**:JFace提供了...

    JFace的源码,从官网下的

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

    jface treeView 的sample

    在Java编程领域,`jface` 是Eclipse项目的一部分,它提供了一系列的用户界面组件,使得开发者能够更容易地创建复杂的图形用户界面(GUI)。`TreeView` 是jFace中用于展示层次结构数据的一个重要控件,它允许用户以树...

    JFace-TableTree的若干问题.doc

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

    SWT/Jface API 3.4

    3. ** SWT/JFace 的事件模型**:SWT 和 JFace 都有自己的事件模型,允许开发者监听和处理用户操作。例如,可以注册监听器来响应按钮点击、窗口关闭等事件。 4. **Dialogs 和 Wizards**:在 SWT/Jface API 3.4 中,...

    jface 入门例子

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

    swt_jface_api

    `org.eclipse.jface.viewers`包中的Viewer类为数据展示提供了统一的接口,可以方便地绑定数据源到视图上,如TableViewer和TreeViewer。此外,JFace还引入了`org.eclipse.jface.databinding`包,支持数据绑定,使得...

    swt jface_API_CHM.zip

    5. **Table and Tree Viewer**: JFace的TableViewer和TreeViewer是对SWT表格和树组件的增强,提供了更多的功能,如排序、过滤、分页,以及与模型数据的紧密集成。 6. **Action Framework**: JFace的动作框架允许...

    SWT/JFace 3.5 API (CHM)

    6. 学习资源:SWT/JFace 3.5 API文档不仅是开发过程中不可或缺的参考,还可以配合Eclipse插件如Eclipse Help Viewer,进一步提升阅读体验。同时,开发者社区提供了丰富的教程、示例代码和论坛讨论,为学习和解决实际...

    Eclipse Swt/Jface核心应用 (01-03章)

    - **视图与控制器**:介绍如何创建JFace视图,利用Viewer框架展示数据,并实现相应的控制器逻辑。 - **对话框与消息框**:展示如何创建自定义对话框,以及使用标准的MessageDialog和InputDialog。 5. **第三章:...

    swt.rar_java swt_jface_swt/jface

    JFace的控件如Viewer和EditPart抽象了SWT的细节,使开发者可以专注于业务逻辑而非底层实现。JFace还提供了视图、编辑器、命令和工作台等核心框架,这些都是Eclipse IDE的基础。 在学习SWT和JFace时,你需要了解它们...

    Eclipse SWT/JFACE 核心应用 配套源代码

    源代码中可能包含JFace的使用示例,如使用Dialogs创建自定义对话框,利用Viewer框架展示和操作数据,以及运用DataBinding进行数据同步。 3. **核心应用**:在"核心应用"的标题中,我们可以期待看到一些基础和关键的...

    JFace Text Framework教程

    **3. 语法分析(Syntax Analysis)** 对于更复杂的语法分析任务,如错误检测和警告提示,JFace Text Framework提供了`ILexer`和`ITokenScanner`接口。开发者可以实现这些接口,将源代码分解成一个个词法单元,并为...

    SWT eclipse Jface API

    例如,`org.eclipse.jface.viewers.Viewer`是JFace的核心组件,它封装了SWT的控件,并提供了模型-视图的分离,使数据和显示分离。`org.eclipse.jface.dialogs.Dialog`则是一系列对话框的基类,可以方便地创建自定义...

    SWT + JFace 入门

    3. org.eclipse.jface_3.2.2.M20061214-1200.jar:JFace的主要库,包含了JFace的大部分功能。 4. org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar:这是SWT针对Windows平台的实现,包含了特定于Windows的GUI组件和...

    SWT/JFace 控件实例

    这会涉及到JFace的Data Binding Support(DBS)和Viewer类。 ### 学习和实践 通过运行这些实例,你可以深入理解SWT和JFace的用法,学习如何设计布局、处理事件、创建自定义控件以及如何将业务逻辑与界面分离。每个...

    SWT-JFace-3.5-API.chm

    - `Viewer`:JFace中的通用视图接口,提供了数据管理和视图更新的机制。 总结来说,SWT-JFace 3.5 API是Java GUI开发的重要工具,它提供了一套强大且灵活的接口,使得开发者可以创建出高效、美观的用户界面。通过...

Global site tag (gtag.js) - Google Analytics