gpt4 book ai didi

java - SWT 表列偏移/填充

转载 作者:行者123 更新时间:2023-12-02 02:34:10 25 4
gpt4 key购买 nike

我有一个包含多列的 SWT Table。在此示例中,假设有三列。每列的单元格都包含一个图像,后跟一些文本(示例如下图所示)。但是,正如您所看到的,2 - 3 条列线与其单元格之间没有间距。

是否有内置方法可以向这些单元格添加缓冲区,以便图标不会出现在边缘线上?例如某种偏移属性?我没有看到 TableTableColumn 中公开列出任何属性。

如果没有,除了向单元格图像添加空白之外,还有其他解决方法吗?

如果我可以做些什么来使我的问题更清楚,请告诉我。

表:

table

最佳答案

我认为没有指定的方法来调整单元格内图像和文本的边距和间距。除了向图像添加透明像素(正如您已经建议的那样)之外,您还可以使用 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

关于java - SWT 表列偏移/填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com