2009-08-05 5 views
2

Eclipse 뷰에서 트리 및 테이블에 대해 동일한 컨텐트 및 레이블 공급자를 사용할 수 있는지 알고 싶거나 별도의 컨텐트 및 레이블 공급자가 있어야합니다. 난뿐만 아니라 테이블에 대한 나무에 대한 쓴 콘텐츠 및 레이블 공급자를 사용하려고하지만 테이블보기에 아무것도 볼 수 있습니다.Eclipse : 트리 뷰 및 테이블 뷰

감사합니다.

+0

대답인가? 그렇다면 답변을 수락하십시오. 그렇지 않다면 질문을 명확히하십시오. 감사합니다. –

답변

2

동일한 레이블 공급자를 사용할 수 있습니다.

트리 콘텐츠 공급자는 테이블 콘텐츠 공급자가 구현해야하는 IStructuredContentProvider 인터페이스와 "호환"되지 않는 ITreeContentProvider를 구현해야하므로 동일한 콘텐츠 공급자를 사용할 수 없습니다.

"호환 가능하지 않음"은 TreeContentProvider의 IStructuredContentProvider.getElements (Object inputElement) 메서드를 구현하면 "루트"개체 만 반환해야하지만 목록 콘텐츠 공급자의 모든 개체를 반환해야한다는 것을 의미합니다.

0

공급자를 공유 할 수 있습니다. ContentProvider는 IStructuredContentProvider와 ITreeContentProvider를 모두 구현해야합니다. 일반적으로 별도의 콘텐츠 제공 업체를 원할 것입니다.

예에서 트리에는 요소가있는 단 하나의 레벨 만 표시됩니다 (모든 요소는 뿌리입니다). 표에는 한 행만 표시됩니다.

예 : 귀하의 질문에 아래

//ContentProvider for Tree and Table 
public static class CommonContentProvider extends ArrayContentProvider 
     implements ITreeContentProvider { 

    @Override 
    public Object[] getChildren(final Object arg0) { 
     return null; 
    } 

    @Override 
    public Object getParent(final Object arg0) { 
     return null; 
    } 

    @Override 
    public boolean hasChildren(final Object arg0) { 
     return false; 
    } 
} 

public static void testCommonProviderTreeTable(final Composite c) { 
    final Collection<String> input = Arrays.asList(new String[] { "hi", 
      "hola" }); 
    final IContentProvider contentProvider = new CommonContentProvider(); 
    final IBaseLabelProvider labelProvider = new LabelProvider() { 
     @Override 
     public String getText(final Object element) { 
      return element.toString(); 
     } 
    }; 
    final TreeViewer tree = new TreeViewer(c, SWT.NONE); 
    tree.setContentProvider(contentProvider); 
    tree.setLabelProvider(labelProvider); 
    tree.setInput(input); 

    final TableViewer table = new TableViewer(c, SWT.NONE); 
    table.setContentProvider(contentProvider); 
    table.setLabelProvider(labelProvider); 
    table.setInput(input); 
} 
+0

뷰어가 삭제되면 해당 레이블 공급자의 dispose() 메서드가 호출됩니다. 예를 들어 DecoratingLabelProvider는이 메소드를 구현하여 이미지를 처 리합니다. 여러 명의 뷰어에서 동일한 LabelProvider 인스턴스를 다시 사용할 수는 없지만이 뷰어가 동시에 삭제되지는 않습니다. – ftl