2014-10-20 80 views
3

我目前正在開發一個Eclipse RCP應用程序,並且是在需要使用OwnerDrawLabelProviderCellLabelProviderTableViewerColumn 這是因爲當我使用任何其他CellLabelProvider,所使用的圖像不居中。Eclipse的OwnerDrawLabelProvider使得選擇背景深藍色

我的問題是當選中該行時,具有此提供程序的單元格的背景比其他所有單元格的背景更深。

這是 「選中」 狀態的樣子:

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); 

     } 

在此先感謝!

回答

5

這是由默認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 
}