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;