Label Provider的使用

一声叹息!还是书接上文吧。

今天我们来讨论一下TableViewer的Label Provider。

对于TableViewer的Label Provider来说,根据Eclipse源码,只要是实现IBaseLabelProvider接口的类就可以,但是事实上TableViewer的Label Provider必须是实现ITableLabelProvider或者ILabelProvider接口的类,如果除了提供Label以外,我们还想定制表格的字体或者颜色的话,我们还需要实现ITableFontProvider和ITableColorProvider或者IColorProvider和IFontProvider;

那么对于TreeViewer来说,根据Eclipse源码,它和TableViewer是一样的。这样我们只要理解了TableViewer的Label Provider,那么TreeViewer也就迎刃而解了,因为自定义的Label Provider必须是实现ITableLabelProvider或者ILabelProvider接口的类;

既然如此,这两个接口到底有什么区别呢?它们的区别就在于如果我们实现了ITableLabelProvider接口,那么它将对每一列提供label text和图像而且在需要时要与ITableFontProvider和ITableColorProvider共同使用;如果我们实现了ILabelProvider接口,那么它仅仅对第一列提供label text和图像,并且需要与IColorProvider和IFontProvider一起使用;

对于ListViewer来说,它就更简单了,它的Label Provider只要实现ILabelProvider就可以了,当然为了处理字体和颜色,它还可以实现IColorProvider和IFontProvider;

 

那好,让我们看看这几个接口到底长的是什么样吧。

第一:ILabelProvider,这个接口提供了两个函数:
1、public Image getImage(Object element);这个函数用来获得第一列的图像;
2、public String getText(Object element);同理,这个函数用来获得第一列的文字描述;

 

第二:ITableLabelProvider,这个接口也提供了两个函数:
1、public Image getColumnImage(Object element, int columnIndex);这个函数用来获得columnIndex所指的那一列,和element所指定的那一行所处位置的图像;
2、public String getColumnText(Object element, int columnIndex);这个不用说了吧;但是记住columnIndex是“zero-based”的!

 

第三:IColorProvider,这个接口也提供了两个函数:
1、Color getForeground(Object element);这个不用说了吧;
2、Color getBackground(Object element);呵呵,还真一样;

 

第四:ITableColorProvider,这个接口也提供了两个函数:
1、Color getForeground(Object element, int columnIndex);对照上面的说明吧;
2、Color getBackground(Object element, int columnIndex);同上;

 

第五:IFontProvider,这个接口仅仅提供了一个函数:
1、public Font getFont(Object element);还用说么?

 

第六:ITableFontProvider,这个接口也提供了一个函数:
1、public Font getFont(Object element, int columnIndex);我就不说了吧;

 

再罗嗦一下:

Eclipse中三个比较重要的viewer在Label Provider方面事实上使用了相同的两套东西,一套是带Table的Label、Font和Color Provider,一套是不带Table的;前者可以对不同的列做更细致的处理,而后者只对第一列起作用;看个人爱好和需要使用吧!

posted on 2010-01-26 10:47  wayne.wang  阅读(1834)  评论(0编辑  收藏  举报

导航