JFace Viewer 3

本文详细介绍了Eclipse SWT库中的StructuredViewer、ListViewer及TableViewer等控件的使用方法与API,包括如何设置标签提供者、内容提供者、排序器等,并提供了具体的代码示例。
<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;
      }
   }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值