2009-12-23 7 views
3

일단 이클립스 표 셀에서 내 자신의 이미지를 그리기 시작하면, 그 표 셀을 강조 표시하면 이상한 강조 색상이된다. 자신에 대한 참조 : 투명성이 실제로 첫 번째 열에처럼 보존Eclipse : 테이블 열 이미지가 투명하지 않습니까?

alt text

동안, 하이라이트 블루가 정상적으로처럼 파란색이 아니다. 이게 내 잘못이야, 이클립스의 잘못이야?

이 여기에 코드입니다 :

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

실마리를 찾기 위해 http://www.eclipse.org/articles/article.php?file=Article-CustomDrawingTableAndTreeItems/index.html을 확인 했습니까? – VonC

답변

2

재정 지우기()와 하지 호출 super.erase() 도움을 주었다.

+0

기본 시스템 "선택"스타일을 얻을 수 있었습니까? Win 7에서 같은 문제가 발생하고 사용자 지정 배경이 아니라 창 하나를 보여주고 싶습니다. – Mirco