2012-05-20 65 views
0

我有更改此圖像列表提供程序到縮略圖提供程序的問題。在需要的情況下,我也會發布視圖。Eclipse RCP ListProvider調整

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(); 

    } 

我不知道如何提供路徑列表,更改爲顯示縮略圖。我是否應該將所提供的內容放入數組並重復創建圖像?如果是這樣如何?

在此先感謝您的幫助。

編輯:

我加

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通過的路徑中的圖像。我真的是這個綠色:/

回答

1

您在這裏缺少的是LabelProvider。您可以使用LabelProvider爲觀衆的輸入中的每個元素提供圖片。

然而,弗朗西斯厄普頓是正確的,我不認爲ListViewer會真正適合您的需求,因爲你最終會得到一列圖像。雖然您無法將圖像直接添加到您的Composite,但您需要將它們設置爲標籤的背景圖像。

有一對夫婦的其他事情要考慮:

  • 您需要將Imagesdispose()一旦你與他們做,因爲他們使用了系統處理。因此,您需要跟蹤您在getElements(Object)方法中創建的圖像。
  • 如果您正在讀取圖像的目錄中未包含縮略圖,則需要在將圖像呈現在用戶界面上之前對圖像進行縮放。

請記住,您從ContentProvider的getElements(Object)方法返回的數組類型定義了將傳遞到LabelProvider方法的類型。所以你開始返回一個表示圖像路徑的字符串數組。您的LabelProvider需要將這些圖像加載到要從提供商的getImage方法返回的圖像中 - 但請記住我關於處理這些圖像的說法!然後,您切換到返回一個圖像描述符數組,在這種情況下,您需要將傳入的對象轉換爲ImageDescriptor並使用它在getImage方法中創建圖像。也許一旦你有這個工作,你可以考慮這是否滿足你的需求,然後可能看看做一個不同的實現,如複合/網格佈局/標籤方法。

+1

+1個不錯的附加信息。 –

+0

我認爲這就是我正在尋找的,但'LabelProvider'缺少'GetElements'它的工作方式與我的'ListProvider'相同嗎? – Seb

+0

'LabelProvider'和'ContentProvider'分別做兩個獨立的功能 - 提供內容,並提供文本/圖標等來表示內容。請參閱:http://wiki.eclipse.org/FAQ_What_are_content_and_label_providers%3F –

0

我不會使用ListViewer這個。我只需創建一個Composite,然後使用GridLayout設置所需的列數和邊距等,然後直接將圖像添加到複合材料。據我所知,你不能在SWT List中放置任何想象的東西,所以ListViewer不會幫你。你可以在createPartControl方法中完成所有這些。

+0

謝謝,我會嘗試這個和發表回覆。編輯:我能從一個目錄獲取文件,就像使用ListViewer一樣簡單嗎? – Seb