2009-12-23 16 views
3

Une fois que je commence à dessiner mes propres images dans une cellule de tableau Eclipse, la mise en évidence de cette cellule de tableau entraîne une couleur de surbrillance étrange. Voyez vous-même:Eclipse: l'image de la colonne du tableau est-elle transparente ou non?

alt text

Bien que la transparence est conservée comme dans effectivement la première colonne, le point culminant bleu n'est pas aussi bleu comme il se doit. Est-ce ma faute ou la faute d'Eclipse?

est ici l'extrait de code:

public class TransparentOrNot { 

    public static void main(String[] args) { 
    Display firstDisplay = new Display(); 
    Shell firstShell = new Shell(firstDisplay); 
    firstShell.setText("Transparent-or-not!"); 
    firstShell.setSize(300, 200); 
    firstShell.setLayout(new FillLayout()); 

    TableViewer viewer = new TableViewer(firstShell, SWT.MULTI); 
    viewer.getTable().setLinesVisible(true); 
    viewer.getTable().setHeaderVisible(true); 

    TableViewerColumn tableViewerColumn = new TableViewerColumn(viewer, SWT.CENTER); 
    tableViewerColumn.getColumn().setText("First"); 
    tableViewerColumn.getColumn().setWidth(150); 
    tableViewerColumn.setLabelProvider(new ColumnLabelProvider() { 

     @Override 
     public Image getImage(Object element) { 
     return ImageDescriptor.createFromFile(TransparentOrNot.class, "/red.png").createImage(); 
     } 

     @Override 
     public String getText(Object element) { 
     return null; 
     } 
    }); 
    tableViewerColumn = new TableViewerColumn(viewer, SWT.CENTER); 
    tableViewerColumn.getColumn().setText("Second"); 
    tableViewerColumn.getColumn().setWidth(150); 
    tableViewerColumn.setLabelProvider(new CenterImageLabelProvider()); 
    viewer.setContentProvider(ArrayContentProvider.getInstance()); 

    viewer.setInput(new String[][]{{"a", "b"}, {"c", "d"}}); 

    firstShell.open(); 
    while (!firstShell.isDisposed()) { 
     if (!firstDisplay.readAndDispatch()) { 
     firstDisplay.sleep(); 
     } 
    } 
    firstDisplay.dispose(); 
    } 

    static class CenterImageLabelProvider extends OwnerDrawLabelProvider { 

    @Override 
    protected void measure(Event event, Object element) { 
     // no-op 
    } 

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

     Image image = ImageDescriptor.createFromFile(TransparentOrNot.class, "/green.png").createImage(); 

     Widget item = event.item; 
     Rectangle bounds = ((TableItem) item).getBounds(event.index); 

     Rectangle imgBounds = image.getBounds(); 
     bounds.width /= 2; 
     bounds.width -= imgBounds.width/2; 
     bounds.height /= 2; 
     bounds.height -= imgBounds.height/2; 

     int x = bounds.width > 0 ? bounds.x + bounds.width : bounds.x; 
     int y = bounds.height > 0 ? bounds.y + bounds.height : bounds.y; 

     event.gc.drawImage(image, x, y); 
    } 
    } 
} 
+1

Avez-vous consulté http://www.eclipse.org/articles/article.php?file=Article-CustomDrawingTableAndTreeItems/index.html pour trouver des indices? – VonC

Répondre

2

erase Redéfinition() et pas appeler super.erase() a aidé.

+0

Avez-vous réussi à obtenir le style de "sélection" du système par défaut? Face au même problème sur Win 7, et je veux montrer pas un arrière-plan personnalisé, mais les fenêtres un – Mirco