Eclipse 插件 - ColumnLabelProvider 仅显示图像
Eclipse plugin - ColumnLabelProvider display only image
所以我正在开发一个 Eclipse 插件并使用 ColumnLabelProvider
为我的树查看器的列提供标签。
但是,在其中一列中,我只打算显示图像而不显示文本。但是,在最终显示中,Eclipse 为文本元素保留空白 space,即使我 return 为 null。
有什么方法可以让它只显示图像并显示完整的space?
这是代码片段:
column4.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return null;
}
@Override
public Image getImage(Object element) {
/* Code to Display an image follows */
.....
}
});
ColumnLabelProvider
将始终为文本保留 space。
您可以使用从 OwnerDrawLabelProvider
派生的 class 自己绘制列。
类似于:
public abstract class CentredImageCellLabelProvider extends OwnerDrawLabelProvider
{
protected CentredImageCellLabelProvider()
{
}
@Override
protected void measure(Event event, Object element)
{
}
@Override
protected void erase(final Event event, final Object element)
{
// Don't call super.erase() to suppress non-standard selection draw
}
@Override
protected void paint(final Event event, final 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);
}
所以我正在开发一个 Eclipse 插件并使用 ColumnLabelProvider
为我的树查看器的列提供标签。
但是,在其中一列中,我只打算显示图像而不显示文本。但是,在最终显示中,Eclipse 为文本元素保留空白 space,即使我 return 为 null。
有什么方法可以让它只显示图像并显示完整的space?
这是代码片段:
column4.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return null;
}
@Override
public Image getImage(Object element) {
/* Code to Display an image follows */
.....
}
});
ColumnLabelProvider
将始终为文本保留 space。
您可以使用从 OwnerDrawLabelProvider
派生的 class 自己绘制列。
类似于:
public abstract class CentredImageCellLabelProvider extends OwnerDrawLabelProvider
{
protected CentredImageCellLabelProvider()
{
}
@Override
protected void measure(Event event, Object element)
{
}
@Override
protected void erase(final Event event, final Object element)
{
// Don't call super.erase() to suppress non-standard selection draw
}
@Override
protected void paint(final Event event, final 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);
}