OwnerDrawLabelProvider

OwnerDrawLabelProvider

我目前正在开发Eclipse RCP应用程序,并且需要使用OwnerDrawLabelProvider作为CellLabelProviderTableViewerColumn这是因为当我使用其他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
}

09-28 03:39