0

我将此图像列表提供程序更改为缩略图提供程序时遇到问题。如有需要,我也会为它发布视图。

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;
    }

和视图

public void createPartControl(Composite parent) {
        iViewer = new ListViewer(parent);
        iViewer.setContentProvider(new DirListProvider());


        getSite().setSelectionProvider(iViewer);
        makeActions();
        hookContextMenu();
        contributeToActionBars();

    }

我不知道如何将提供的路径列表更改为缩略图显示。我应该将提供的内容放入 Array 并遍历它以创建图像吗?如果有怎么办?

在此先感谢您的帮助。

编辑:

我添加了

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;

但这根本没有显示任何内容。

当您告诉我使用Composite时,它是我的父变量吗?我仍然不知道如何显示经过的路径中的图像ListProvider。我在这方面真的很绿色:/

4

2 回答 2

1

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

但是,弗朗西斯厄普顿是对的,我认为 ListViewer 不会真正满足您的需求,因为您最终会得到一列图像。尽管您无法将图像直接添加到您的Composite中,但您需要将它们设置为标签的背景图像。

还有一些其他的事情需要考虑:

  • 一旦你用完它们,你就需要dispose()Images的,因为它们会用完系统句柄。因此,您需要跟踪您在getElements(Object)方法中创建的图像。
  • 如果您从中读取图像的目录尚不包含缩略图,则您需要先缩放图像,然后再将它们呈现在您的 UI 上。

请记住,您从 ContentProvider 的 getElements(Object) 方法返回的数组类型定义了将传递给您的 LabelProvider 方法的类型。因此,您开始返回一个表示图像路径的字符串数组。您的 LabelProvider 需要将这些加载到要从提供程序的 getImage 方法返回的图像中 - 但请记住我所说的关于处理这些图像的内容!然后您切换到返回一个图像描述符数组,在这种情况下,您需要将传入的 Object 转换为 ImageDescriptor 并使用它在 getImage 方法中创建 Image。也许一旦你有了这个工作,你可以考虑这是否满足你的需求,然后可能会考虑做一个不同的实现,比如复合/网格布局/标签方法。

于 2012-05-20T20:15:55.300 回答
0

我不会ListViewer为此使用 a 。我只需创建一个Composite,然后使用GridLayout设置您想要的列数和边距等,然后将图像直接添加到合成中。据我所知,您不能将想象中的任意东西放在 SWTList中,因此ListViewer不会对您有所帮助。您可以在createPartControl方法中完成所有这些操作。

于 2012-05-20T19:29:03.873 回答