Eclipse OwnerDrawLabelProvider使选择背景为深蓝色

时间:2014-10-20 10:31:34

标签: swt eclipse-rcp jface

我目前正在开发Eclipse RCP应用程序,我需要使用OwnerDrawLabelProvider CellLabelProvider作为TableViewerColumn 这是因为当我使用任何其他CellLabelProvider时,使用的图像不会居中。

我的问题是,当选择该行时,具有此提供程序的单元格的背景颜色比所有其他单元格更深。

这就是“选定”状态的样子:

enter image description here

这是我的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 );

        }

提前致谢!

1 个答案:

答案 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
}