簡體   English   中英

SWT表列偏移/填充

[英]SWT Table column offset/padding

我有一個帶有多列的SWT Table 在此示例中,假設有三列。 每列的單元格都包含一個圖像,后跟一些文本(示例如下圖所示)。 但是,如您所見,2-3列線與其單元之間沒有間距。

是否有內置的方法向這些單元格添加緩沖區,以使圖標不會出現在邊緣線上? 例如某種偏移屬性? 我沒有在TableTableColumn公開列出任何屬性。

如果沒有,除了將空白添加到單元格圖像之外,還有其他解決方法嗎?

如果可以采取任何措施使我的問題更清楚,請告訴我。

表:

表

我認為沒有一種指定的方法可以調整單元格中圖像和文本的邊距和間距。 除了向圖像添加透明像素(如您已經建議的那樣)之外,您還可以使用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中所有者繪制的項目,請閱讀“ 自定義工程圖表和樹項目”文章。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM