2017-05-08 18 views
0

저는 TableViewer를 가지고 있고 그래픽을 한 열에 갖고 싶습니다. 어떻게해야합니까? 작동하지 않는 무엇JFace TableViewer : 캔버스에 글타래

은 다음과 같습니다

가 나는 캔버스로 TableEditor을 시도, 니펫을 :

MyCanvas canvas = new MyCanvas (tableViewer.getTable(), SWT.NONE, (MyClass)item.getData()); 

MyCanvas 도면 작업을 일을 PaintListener을 갖는.

테이블 셀에서 그림을 그리지 만, tableViewer을 필터링하면 그래픽 열이 필터링되지 않은 상태로 유지됩니다. 표에 100 개의 줄이 있고 필터가 80 개의 줄과 일치한다고 가정하면 결과는 80 줄입니다. 데이터이지만 캔버스가있는 100 줄, 그래서 캔버스가 보이지 않는 곳의 20 줄도 있습니다.

문제는 TableViewer가 아닌 TableEditor를 가지고 있다고 가정합니다. TableViewer.setCellEditors()이 있다는 것을 알았지 만 셀 (칸) 캔버스에 쓸 수있는 방법을 모르겠습니다.

아마도 편집자를 사용하지 않고 (필터링 된!) 표 셀의 캔버스를 가져 오는 또 다른 가능성이 있습니다. 모든 솔루션 힌트에 대해 많은 감사드립니다. greg449's에 accoring에

+0

당신은 열 레이블 공급자로'OwnerDrawLabelProvider'를 사용하여보고 할 수 있습니다. 이렇게하면 직접 열을 직접 그릴 수 있습니다. –

+0

고마워요. 그게 속임수 였어요! –

답변

0

는 암시,이 솔루션은 다음과 같습니다

TableViewerColumn tvc = new TableViewerColumn(tableViewer, SWT.NONE); 
tvc.getColumn().setText("Headline"); 
tvc.getColumn().setWidth(200); 
tvc.setLabelProvider(new ProjectBarDrawer()); 

... 

class ProjectBarDrawer extends OwnerDrawLabelProvider { 

    @Override 
    protected void paint(Event event, Object element) { 
    // do the painting on event.gc here 
    }  

}