【问题标题】:How to align CENTER in Jface tableviewer column checkbox image?如何在 Jface tableviewer 列复选框图像中对齐 CENTER?
【发布时间】:2018-11-08 05:51:12
【问题描述】:

我在 Jface tableviewer 列中使用复选框图像,我想在表格列的中心显示复选框图像。请检查所附图片并分享您的想法以解决此问题。提前致谢,

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);

【问题讨论】:

  • 检查的图像来自哪里?
  • 此图像来自我们的实用程序图像包。基于 LabelProvider 中的数据图像设置。私有图像 getCheckImage(boolean key) { imageDec = Images.getCheckedCheckbox(); if (key) { imageDec = Images.getCheckedCheckbox(); } else { imageDec = Images.getUncheckedCheckbox(); } 返回 imageDec == null ?空:图像解码器; }

标签: java swt eclipse-rcp jface tableviewer


【解决方案1】:

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);
}

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2015-12-15
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多