我目前正在开发Eclipse RCP应用程序,我需要使用OwnerDrawLabelProvider CellLabelProvider
作为TableViewerColumn
这是因为当我使用任何其他CellLabelProvider
时,使用的图像不会居中。
我的问题是,当选择该行时,具有此提供程序的单元格的背景颜色比所有其他单元格更深。
这就是“选定”状态的样子:
这是我的OwnerDrawLabelProvider:
class SomeLabelProvider extends OwnerDrawLabelProvider {
private static final int smallColumnSize = 70;
@Override
protected void measure( Event event, Object element ) {
Rectangle rectangle = IMAGE_CHECKED.getBounds();
event.setBounds( new Rectangle( event.x, event.y, smallColumnSize,
rectangle.height ) );
}
@Override
protected void paint( Event event, Object element ) {
Rectangle bounds = event.getBounds();
//paint icon at the center
event.gc.drawImage( getImage( element ),
bounds.x + ((smallColumnSize -
IMAGE_CHECKED.getBounds().width) / 2),
bounds.y );
}
//this is implemented somewhere else
protected abstract Image getImage( Object element );
}
提前致谢!
答案 0 :(得分:5)
这是由默认的erase
方法引起的,JavaDoc就是这样说的:
处理擦除事件。默认实现着色 使用SWT.COLOR_LIST_SELECTION和选定区域的背景 使用SWT.COLOR_LIST_SELECTION_TEXT进行前景化。请注意这一点 实现会在某些平台上导致非本机行为。 子类应该重写此方法而不是调用super 实施
所以只需添加一个erase
覆盖,它什么都不做:
@Override
protected void erase(Event event, Object element)
{
// Don't call super to avoid selection draw
}