java在jface tableviewer中显示多个图像
我需要在JFace tableviewer的一列中显示最多4个图像。使用labelprovider,我只能显示单个图像
我有四个16x16图像,根据不同的条件,我想显示1或2或3或4个图像。有什么想法吗
到现在为止,我已经做到了
private CellLabelProvider getLabelProvider(String id) {
CellLabelProvider labelProvider = null;
if(id.equals("PROPERTIES")){
labelProvider = new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return null;
}
@Override
public Image getImage(Object element) {
RouteType route=(RouteType) element;
if(cond1) return Image1;
if (cond2) return Image2;
if(cond3) return Image3;
if(cond4) return Image4;
return null;
}
};
}
}
如果cond1、cond2、cond3和cond4为真,我想返回所有四个图像Image1、Image2、Image3和Image4
# 1 楼答案
动态创建一个合成图像可能是另一个解决方案,如果你想坚持你的标签供应商。我很想和大家分享,虽然我没试过
// inside your getImage method // say you have three images to show Image compositeImg = new Image(Display.getCurrent(), 48, 16); GC gc = new GC(compositeImg); gc.drawImage(img1, 0, 0); gc.drawImage(img2, 16, 0); gc.drawImage(img3, 32, 0); gc.dispose(); return compositeImg;
img1
、img2
和img3
是以前创建的Image
实例,大小为16x16像素。您可以轻松地将它们组织到您的算法中,以正确地创建组合你可以选择一张16x4的固定宽度的组合表
# 2 楼答案
正如您所见,标签提供程序只支持一个图像
您可能可以使用从
org.eclipse.jface.resource.CompositeImageDescriptor
派生的类将多个图像合并到一个图像中。我不确定这张桌子能不能很好地处理不同宽度的图像如果这不起作用,您可以使用从
org.eclipse.jface.viewers.OwnerDrawLabelProvider
派生的标签提供程序。此标签提供程序可让您完全控制表格单元格的绘制,但需要一些SWTGC
绘制操作的经验