2012-05-20 6 views
0

이 이미지 목록 공급자를 축소판 공급자로 변경하는 데 문제가 있습니다. 필요한 경우 나는 그것을 위해 View도 게시 할 것이다.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(); 

    } 

. 제공된 콘텐트를 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에 의해 전달 된 경로에서 이미지를 표시하는 방법을 여전히 모르겠습니다. 나는 이것에서 실제로 녹색이다 :/

답변

1

여기에 누락 된 내용은 LabelProvider입니다. LabelProvider을 사용하여 뷰어 입력의 각 요소에 대한 이미지를 제공 할 수 있습니다.

그러나 Francis Upton이 맞습니다. 단일 열의 이미지로 끝나기 때문에 ListViewer가 실제로 사용자의 요구에 맞지 않을 것이라고 생각합니다. Composite에 이미지를 직접 추가 할 수는 없지만 레이블의 배경 이미지로 설정해야합니다.

다른 몇 가지 고려해야 할있다 : 그들은 시스템이 처리까지 사용 당신이 그들과 함께 완료되면

  • 당신은 당신의 Imagesdispose()해야합니다. 따라서 getElements(Object) 방법으로 만든 이미지를 추적해야합니다.
  • 이미지를 읽는 디렉토리에 미리보기 이미지가 아직없는 경우 이미지를 UI에 표시하기 전에 크기를 조정해야합니다.

ContentProvider의 getElements (Object) 메소드에서 반환하는 배열 유형은 LabelProvider의 메서드로 전달되는 유형을 정의합니다. 그래서 이미지 경로를 나타내는 문자열 배열을 반환하기 시작했습니다. LabelProvider는 공급자의 getImage 메서드에서 반환 할 이미지에이 이미지를로드해야합니다. 그러나이 이미지를 삭제하는 것에 대해 언급 한 것을 기억하십시오! 그런 다음 이미지 디스크립터 배열을 반환하는 것으로 바꿨습니다.이 경우 들어오는 Object를 ImageDescriptor로 캐스팅 한 다음 getImage 메서드에서 Image를 생성해야합니다.어쩌면이 작업을 수행 한 후에 이것이 사용자의 요구를 충족시키는 지에 대해 생각할 수 있으며, 복합/그리드 레이 아웃/레이블 접근과 같은 다른 구현을 수행 할 수도 있습니다.

+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