`
ningxiaofeng
  • 浏览: 6428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JFACE技术 转帖+整理

阅读更多

Jface提供了阅读器框架使对于特定小部件的操控更加容易。这一框架包括许多关系复杂的类和接口。

 

阅读器框架是模型-视图-控制器(MVC)设计模式的一个应用。核心的理念是将域对象(模型Model)从用户界面(视图View)和控制它们的逻辑(控制器Controller)中分离出来。

 

一个恰当的阅读器提供有一个介于小部件和显示和形成MVC三元之一的视图部分的数据之间的抽象层,为一个域对象生成一个display。对于客户程序而言,一个阅读器提供了比小部件本身更为自然的操控用户界面。在另外一个方面,小部件已经赋予其获取数据的能力而无需担心数据源自何处。通过有Viewer提供的接口来操控一系列的对象,小部件能够在其内部使用时重新排列数据成最为便捷的形式而不破坏数据的原有结构。

 

ContentViewer通过使用系列的接口获取了处理以域对象形式出现的数据的能力,这些接口按照JFace的惯例都在其名字前冠以I。

 

StructureViewer在由ContentViewer提供的数据上加了一个结构。结构的细节变动可能很广泛,但是执行诸如排列、过滤之类的通常任务都是在这一层继承层面应用的。每一个小部件——树、列表、表格等都有对应的Viewer子类,诸如ListViewer或TableViewer。小部件总是趋向于同至多一个其阅读器的实例相匹配,而一旦该阅读器被绑定于小部件,则所有的操控就由阅读器而不是直接由小部件来实施。如果试图在小部件和其阅读器之间混合调用会导致难以预测的后果。所有的具体的Viewer子类都提供一个构造器来将合适的小部件的实例绑定于其阅读器。

 

些基本类中定义的方法是不能被你的程序代码所直接调用的。为此你需要提供一个带有阅读器的类来应用这些接口之一,然后阅读器会在恰当的时候调用你类中的方法。

 

重要的阅读器方法:

getControl() Viewer

getSelection() Viewer

refresh() Viewer

setInput() Viewer

setContentProvider() ContentViewer

setLabelProvider() ContentViewer

addFilter() StructuredViewer

reveal() StructuredViewer

setSorter() StructuredViewer

 

 

不同的阅读器为广泛系列的事件监听器提供支持。基本的Viewer类提供对于帮助请求(help request)和选择改变(selection changed)事件的通知。观察谱系图中再往下细节,StructuredViewers加入了(鼠标)双击事件的支持,而AbstractTreeViewer则加入了默认的选择和树事件的支持。早先所说的原则在此同样适用。监听器被应用于应用程序后的逻辑;它们构成了MVC的Controller部分。

 

过滤器:

处于效率方面的考虑,一次读取全部对象并将它们缓存起来是更有意义的做法。向一个数据库往返重复读写常量很明显会减缓程序运行直至龟行。 为了使用一个过滤器,你需要一次装载整套数据,或是使用一个ContentProvider来加入对象。当到了显示数据的时候,你就调用StructuredViewer的addFilter()方法,给它以一个ViewerFilter的应用来指明仅接收需要显示的元素。

 

调用addFilter()方法会自动地触发元素的重过滤,现在仅有以用户输入的字符串打头的才得以现死活。注意到没有必要为原始的对象集合而担心。阅读器始终维持着整个集合;它选择来显示的仅当select()方法被调用,过滤器返回值为真的。很有可能在一个阅读器上存在多个过滤器;若如此,只有通过所有过滤器的元素才得以显示。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics