我目前正在开发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 );
}
提前致谢!
最佳答案
这是由默认的erase
方法引起的,JavaDoc对此表示:
处理擦除事件。默认实现为
SWT.COLOR_LIST_SELECTION和
SWT.COLOR_LIST_SELECTION_TEXT的前景。注意这个
在某些平台上实施会导致非本地行为。
子类应重写此方法,而不应调用父方法
实施。
因此,只需添加一个不执行任何操作的erase
覆盖:
@Override
protected void erase(Event event, Object element)
{
// Don't call super to avoid selection draw
}