在jface tableviewer中显示多个图像

时间:2014-03-17 06:16:31

标签: java swt jface

我需要在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。

2 个答案:

答案 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;

img1img2img3是之前创建的Image个实例,大小为16x16像素。您可以轻松地将它们组织到算法中以正确创建复合。

如果行为不正确的表格的图像宽度变化为@ greg-449指向,则可以选择合成的固定大小宽度为16x4 = 64。