Eclipse RCP ListProvider调整

Eclipse RCP ListProvider调整,eclipse,image,list,rcp,provider,Eclipse,Image,List,Rcp,Provider,我无法将此图像列表提供程序更改为缩略图提供程序。如果需要的话,我也会发布它的视图 public Object[] getElements(Object inputElement) { if (iDirname == null) return null; File dir = new File(iDirname); FilenameFilter filter = new FilenameFilter() {

我无法将此图像列表提供程序更改为缩略图提供程序。如果需要的话,我也会发布它的视图

public Object[] getElements(Object inputElement) {
        if (iDirname == null)
            return null;
        File dir = new File(iDirname);
        FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File directory, String filename) {
                if (filename.endsWith("jpg") || (filename.endsWith("bmp")) || (filename.endsWith("png") || (filename.endsWith("JPG") || (filename.endsWith("BMP")) || (filename.endsWith("PNG")))))
                    return true;
                else
                    return false;
            }
        };
        String[] dirList = null;

        if (dir.isDirectory()) {
            dirList = dir.list(filter);
            for (int i=0; i<dirList.length;++i){

                //dirList2[i] = new Image(device, dirList2[i]); added this to try passing array of Images - failed.
                dirList[i] = iDirname + File.separatorChar + dirList[i];

            }
        }
        return dirList;
    }
我不知道如何将提供的路径列表更改为缩略图显示。我是否应该将提供的内容放入数组中,并在其中迭代创建图像?如果是,怎么做

提前感谢你的帮助

编辑:

我补充说

ImageDescriptor[] dirList = null;
        if (dir.isDirectory()) {
            String[] dirList2 = dir.list(filter);
            for (int i=0; i<dirList2.length;++i){

                dirList[i] = ImageDescriptor.createFromImageData(new ImageData(iDirname + File.separatorChar + dirList2[i]));
                //dirList[i] = iDirname + File.separatorChar + dirList[i];

            }
        }
        return dirList;
ImageDescriptor[]目录列表=null;
if(dir.isDirectory()){
字符串[]dirList2=dir.list(过滤器);

对于(int i=0;i我不会为此使用
ListViewer
。我只会创建一个
Composite
,然后使用
GridLayout
设置所需的列数和边距等,然后直接将图像添加到合成中。据我所知,您不能在SWT
列表
,因此
列表查看器
对您没有帮助。您可以在
createPartControl
方法中执行所有这些操作。

这里缺少的是一个。您可以使用
LabelProvider
为查看器输入中的每个元素提供图像

但是,Francis Upton是对的,我认为ListViewer不会真正满足您的需要,因为您最终会得到一列图像。尽管您无法将图像直接添加到您的
合成文件中,但您需要将它们设置为标签的背景图像

还有几件事需要考虑:

  • 一旦
    图像用完系统句柄,您就需要
    dispose()
    处理它们。因此,您需要跟踪在
    getElements(Object)
    方法中创建的图像
  • 如果正在读取图像的目录中尚未包含缩略图,则在将图像显示在UI上之前,需要缩放图像

记住,从ContentProvider的getElements(对象)返回的数组类型方法定义将传递到LabelProvider的方法中的类型。因此,您开始返回一个表示图像路径的字符串数组。LabelProvider需要将这些字符串加载到图像中,然后从提供程序的getImage方法返回-但请记住我说过的关于处理这些图像的内容!然后您可以为了返回一个图像描述符数组,在这种情况下,您需要将传入对象强制转换为ImageDescriptor,并使用该对象在getImage方法中创建图像。也许一旦完成此工作,您可以考虑这是否满足您的需要,然后可能考虑执行不同的实现,例如合成/gridlayout/label方法。

谢谢,我将尝试此方法并发布回复。编辑:我是否能够从目录中获取文件,就像使用
ListViewer
一样简单?我想这就是我要寻找的,但是
LabelProvider
缺少
GetElements
它的工作方式是否与我的
ListProvider
相同
ContentProvider
执行两个独立的补充功能-提供内容,以及提供文本/图标等来表示该内容。请参阅:
ImageDescriptor[] dirList = null;
        if (dir.isDirectory()) {
            String[] dirList2 = dir.list(filter);
            for (int i=0; i<dirList2.length;++i){

                dirList[i] = ImageDescriptor.createFromImageData(new ImageData(iDirname + File.separatorChar + dirList2[i]));
                //dirList[i] = iDirname + File.separatorChar + dirList[i];

            }
        }
        return dirList;