User interface 具有交替行颜色和排序过滤功能的SWT表

User interface 具有交替行颜色和排序过滤功能的SWT表,user-interface,swt,jface,tableviewer,User Interface,Swt,Jface,Tableviewer,我正在通过在标签提供程序中实现ITableColorProvider,将交替行颜色添加到SWT/JFace表中,但是当对表进行排序或过滤时,表行颜色不会保持其位置。因此,我将在白色行旁边有白色行,在灰色行旁边有灰色行。我猜这是因为我的元素被重新排列,行的颜色也随之改变。以下是我正在使用的在筛选或排序表时不起作用的内容: 公共颜色getBackground(对象元素) { ArrayList=(ArrayList)tableViewer.getInput(); int index=list.ind

我正在通过在标签提供程序中实现ITableColorProvider,将交替行颜色添加到SWT/JFace表中,但是当对表进行排序或过滤时,表行颜色不会保持其位置。因此,我将在白色行旁边有白色行,在灰色行旁边有灰色行。我猜这是因为我的元素被重新排列,行的颜色也随之改变。以下是我正在使用的在筛选或排序表时不起作用的内容:

公共颜色getBackground(对象元素) { ArrayList=(ArrayList)tableViewer.getInput(); int index=list.indexOf(元素); 如果((索引%2)==0) { 返回灰色; } 其他的 { 返回null; } }
在通过排序或过滤更改表之前,它工作得非常好。谢谢您的帮助。

我想您必须使用
TableViewer
getElementAt
调用来搜索元素以找到对象的索引。使用类似于:

private int findElementIndex(对象元素)
{
对于(int i=0;i

注意:对于一个大的表来说,这会很慢。

如果您能够使用
ColumnLabelProvider
,您也可以使用中介绍的方法。
ColumnLabelProvider
提供对
表项的访问。代码片段试图提高性能,因为它缓冲了最近计算的项索引(请参见
OptimizedIndexSearcher
)。正如@Rüdigerhermann所说,使用
ColumnLabelProvider
是一个更好的解决方案。