2016-04-24 12 views
1

Also ich entwickle ein Eclipse-Plug-in und ColumnLabelProvider verwenden, um Beschriftung für die Spalten meiner Baum Viewer.Eclipse-Plugin - ColumnLabelProvider nur Bild anzeigen

In einer der Spalten möchte ich jedoch nur ein Bild und keinen Text anzeigen. In der letzten Anzeige reserviert Eclipse jedoch Leerzeichen für das Textelement, selbst wenn ich eine Null zurückgebe.

Gibt es eine Möglichkeit, nur das Bild und den gesamten verfügbaren Platz anzuzeigen? Hier

ist der Code-Schnipsel:

column4.setLabelProvider(new ColumnLabelProvider() { 

     @Override 
     public String getText(Object element) { 
      return null;  
     } 

     @Override 
     public Image getImage(Object element) { 
      /* Code to Display an image follows */ 
      ..... 

     } 
    }); 

Antwort

2

ColumnLabelProvider immer lassen Raum für den Text.

Sie können eine von OwnerDrawLabelProvider abgeleitete Klasse verwenden, um die Spalte selbst zu zeichnen.

Etwas wie:

public abstract class CentredImageCellLabelProvider extends OwnerDrawLabelProvider 
{ 
    protected CentredImageCellLabelProvider() 
    { 
    } 

    @Override 
    protected void measure(Event event, Object element) 
    { 
    } 

    @Override 
    protected void erase(final Event event, final Object element) 
    { 
    // Don't call super.erase() to suppress non-standard selection draw 
    } 

    @Override 
    protected void paint(final Event event, final Object element) 
    { 
    TableItem item = (TableItem)event.item; 

    Rectangle itemBounds = item.getBounds(event.index); 

    GC gc = event.gc; 

    Image image = getImage(element); 

    Rectangle imageBounds = image.getBounds(); 

    int x = event.x + Math.max(0, (itemBounds.width - imageBounds.width)/2); 
    int y = event.y + Math.max(0, (itemBounds.height - imageBounds.height)/2); 

    gc.drawImage(image, x, y); 
    } 

    protected abstract Image getImage(Object element); 
} 
+0

Vielen Dank, Greg. Dies beantwortet meine Frage. –