Как выровнять CENTER в изображении флажка столбца Jface Tableviewer? - PullRequest
0 голосов
/ 29 мая 2018

Я использую изображение флажка в столбце Jface TableViewer, я хочу показать изображение флажка в центре столбца таблицы.Пожалуйста, проверьте прикрепленное изображение и поделитесь своими мыслями, чтобы решить эту проблему.Заранее спасибо,

Tableviewer sample image

customizedTableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
    customizedTable.setLinesVisible(true);
    customizedTable.setHeaderVisible(true);
    customizedTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

TableColumn refTemplateTblclmnColumn = new TableColumn(customizedTable, SWT.NONE);
    refTemplateTblclmnColumn.setWidth(180);
    refTemplateTblclmnColumn.setText(TextResources.TEMPLATE_COLUMN);

TableColumn hospitalTblclmnColumn = new TableColumn(customizedTable, SWT.NONE);    
// I have tried following code but it's not working.
    hospitalTblclmnColumn.setAlignment(SWT.CENTER);
    hospitalTblclmnColumn.setWidth(100);
    hospitalTblclmnColumn.setText(TextResources.EL_HSP_COLUMN);

TableColumn providerTblclmnColumn = new TableColumn(customizedTable, SWT.NONE);
    providerTblclmnColumn.setWidth(100);
    providerTblclmnColumn.setText(TextResources.EL_PROVIDER_COLUMN);

1 Ответ

0 голосов
/ 29 мая 2018

Стиль 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);
}
...