2017-10-09 128 views
0

我有SWT Table多列。在這個例子中,假設有三列。每列的單元格都包含一個圖像,後面跟着一些文本(如下圖所示)。但是,正如您所看到的,2 - 3列線與其單元格之間沒有間距。SWT表格列偏移量/填充

是否有內置的方式爲這些單元格添加緩衝區,以便圖標不會出現在邊緣線上?比如某種偏移屬性?我沒有看到任何明顯在TableTableColumn中列出的房產。

如果不是,除了向單元格圖像添加空白之外,是否有解決方法?

請讓我知道是否有什麼我可以做的,使我的問題更清晰。

表:

table

回答

2

我不認爲這是一個指定的方式來調節細胞內的保證金和圖像和文字的間距。除了向圖像添加透明像素(如您已經建議的),您可以使用PaintListener來控制單元格的渲染方式。

下面的示例繪製圖片和文字與調整邊距和行距:

Listener paintListener = new Listener() { 
    int leftMargin = 40; 
    int rightMargin = 10; 
    int imageSpacing = 200; 
    @Override 
    public void handleEvent(Event event) { 
    TableItem item = (TableItem)event.item; 
    Rectangle imageBounds = image.getBounds(); 
    Point textExtent = event.gc.textExtent(item.getText()); 
    switch(event.type) { 
     case SWT.MeasureItem: { 
     event.width += leftMargin + imageBounds.width + imageSpacing + textExtent.x + rightMargin; 
     event.height = Math.max(event.height, imageBounds.height + 2); 
     event.height = Math.max(event.height, textExtent.y + 2); 
     break; 
     } 
     case SWT.PaintItem: { 
     int x = event.x + leftMargin; 
     int imageOffset = (event.height - imageBounds.height)/2; 
     event.gc.drawImage(image, x, event.y + imageOffset); 
     x += imageSpacing; 
     int textOffset = (event.height - textExtent.y)/2; 
     event.gc.drawText(item.getText(), x, event.y + textOffset); 
     break; 
     } 
     case SWT.EraseItem: { 
     event.detail &= ~SWT.FOREGROUND; 
     } 
    } 
    } 
}; 
table.addListener(SWT.MeasureItem, paintListener); 
table.addListener(SWT.PaintItem, paintListener); 
table.addListener(SWT.EraseItem, paintListener); 

對於所有者繪製項目在SWT更透徹的理解,請閱讀Custom Drawing Table and Tree Items文章。

如果您使用的是JFace的TableViewer,還有一個OwnerDrawLabelProvider,如圖所示: http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced/article.html#styledcelllabelprovider-and-ownerdrawlabelprovider

+0

不幸的是,我沒有使用的JFace的TableViewer和設計規範阻止我把圖像在細胞的右側。看起來我最好的選擇是在圖像的左側插入透明像素。我一直在尋找一種方法來做到這一點與GC沒有創建額外的句柄(一些例子顯示使用臨時透明圖像)。你偶然知道一種方式或有一個好的問題的鏈接? – Sarah

+0

你不需要使用JFace,一個普通的'PaintListener'也可以。鏈接的SWT片段只是一個示例,您可以用它作爲了解如何放置圖像的起點。 –