Стиль SWT.CENTER центрирует только текст.Для обычных поставщиков этикеток нет возможности получить центрированное изображение.Вы должны нарисовать столбец самостоятельно, используя что-то на основе OwnerDrawLabelProvider
.
Лучше всего использовать TableViewerColumn
вместо TableColumn
, чтобы вы могли установить отдельный поставщик меток для каждого столбца.Столбцы, для которых требуется центрированное изображение, могут использовать поставщика меток для рисования, например:
public abstract class CentredImageCellLabelProvider extends OwnerDrawLabelProvider
{
public CentredImageCellLabelProvider()
{
super();
}
@Override
protected void measure(Event event, Object element)
{
// No action
}
@Override
protected void erase(Event event, Object element)
{
// Don't call super.erase() to suppress non-standard selection draw
}
@Override
protected void paint(Event event, Object element)
{
TableItem item = (TableItem)event.item;
Rectangle itemBounds = item.getBounds(event.index);
GC gc = event.gc;
Image image = getImage(element);
Rectangle imageBounds = image.getBounds();
int x = event.x + Math.max(0, (itemBounds.width - imageBounds.width) / 2);
int y = event.y + Math.max(0, (itemBounds.height - imageBounds.height) / 2);
gc.drawImage(image, x, y);
}
protected abstract Image getImage(Object element);
}