MVC表格(TableViewer):
TableViewer封装了SWT中的Table对象,但是其组织和显示数据由两个接口IStructuredContentProvider(继承自IContentProvider)和ITableLabelProvider(继承自IBaseLabelProvider)管理(这两个接口采用了设计模式中常见的策略模式),分别实现这两个接口即可。
IStructuredContentProvider中主要需要实现getElements函数,这个函数负责将setInput的参数转变为Object的数组输出。
ITableLabelProvider中主要实现getColumnText和getColumnImage。getColumnText的输入是getElements的Object数组的每一项。针对每一个Object实例,我们在getColumnText中手动进行区分并返回希望显示在表中的值。
编辑表格:和SWT的tableEditor一样, Jface有cellEditor。直接用tableViewer的setCellEditors方法和setCellModifier方法(形参为实现ICellModifier接口的实例)。
表格拖拽:直接由TableViewer.addDragSupport和addDropSupport添加。本人的项目用的是command方法,稍后再详细说。
其他表格还包括CheckBoxTableViewer(TableViewer子类,用法相同)
MVC树(TreeViewer):
树与表格相比的复杂之处在于考虑父子节点的问题。这里最好创建一个树节点类。包含hasChild,getChild,getName等函数。
与MVC表格一样,其组织和显示数据由两个接口ITreeContentProvider和ILabelProvider管理,分别实现这两个接口即可。
大多数函数形参为Object, 注意使用instanof判断类型,然后再进行类型转换。
MVC清单(ListViewer):略。