我需要在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。
答案 0 :(得分:1)
如您所见,标签提供商仅支持一个图像。
您可以使用从org.eclipse.jface.resource.CompositeImageDescriptor
派生的类将多个图像合并到一个图像中。我不确定桌子处理不同宽度图像的效果如何。
如果这不起作用,您可以使用从org.eclipse.jface.viewers.OwnerDrawLabelProvider
派生的标签提供程序。此标签提供程序使您可以完全控制绘制表格单元格,但需要具备SWT GC
绘制操作的一些经验。
答案 1 :(得分:0)
如果您想坚持使用标签提供商,动态创建一个合成图像可能是另一种解决方案。我想分享一下,虽然我没试过。
// 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像素。您可以轻松地将它们组织到算法中以正确创建复合。
如果行为不正确的表格的图像宽度变化为@ greg-449指向,则可以选择合成的固定大小宽度为16x4 = 64。