2010-06-22 4 views
1

행운과 함께 여러 개의 열이있는 FilteredTree을 만들려고합니다. TreeViewer을 사용하면 열이 잘 작동하지만 FilteredTree을 사용하여 전환 할 때 열을 제거하면 작동 할 수 있기 때문에 열이있는 FilteredTree을 사용하는 방법이 있는지 궁금합니다.Eclipse의 열 및 필터링 된 트리

답변

1

확실히 FilteredTree를 열 뷰어와 함께 사용할 수 있습니다.

final TreeColumnLayout tl = new TreeColumnLayout(); 

PatternFilter patternFilter = new PatternFilter(); 
patternFilter.setIncludeLeadingWildcard(true); 
FilteredTree ft = new FilteredTree(treeViewerComposite, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | toolkit.getBorderStyle() | Window.getDefaultOrientation(), patternFilter, true) {    
    @Override 
    protected Control createTreeControl(Composite parent, int style) { 
     Control c = super.createTreeControl(parent, style); 
     c.setLayoutData(null); 
     c.getParent().setLayout(tl); 
     return c; 
    }   
}; 

viewer = ft.getViewer(); 
viewer.getTree().setHeaderVisible(true); 

지금 방금 TREECOLUMN의 일반적인 방법을 만들 수 있습니다 당신의 열이 나타납니다 예를 들어 (이 또한 FilteredTree를 사용하여 TreeColumnLayout의 사용을 유지 보여줍니다).

+0

불행히도이 코드는 어설 션 오류를 발생시킵니다. 이 방법으로 레이아웃 설정 코드가 올바르지 않습니다. – allprog

1

normal Tree과 같은 방식으로 처리 할 수 ​​있습니다. 다음은 전체 설정입니다.

PatternFilter patternFilter = new PatternFilter(); 
patternFilter.setIncludeLeadingWildcard(true); 
filteredTree = new FilteredTree(getContainer(), SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL, patternFilter, true); 

TreeViewer viewer = filteredTree.getViewer(); 
tree = viewer.getTree(); 
tree.setHeaderVisible(true); 

TreeColumn modelColumn = new TreeColumn(tree, SWT.LEFT); 
modelColumn.setText("Model"); 
modelColumn.setWidth(400); 

TreeViewerColumn treeViewerModelColumn = new TreeViewerColumn(viewer, modelColumn); 
treeViewerModelColumn.setLabelProvider(new ColumnLabelProvider()); 
0

예, 거기에 방법이며,이 솔루션은 여기에 설명되어 있습니다 : http://eclipsesource.com/blogs/2012/10/26/filtering-tables-in-swtjface/

image from EclipseSource blog

요점은 기본 PatternFilter 나무 ILabelProvider의 인스턴스가 나뭇잎 필요가있다. 열 기반 트리 뷰어에는 트리 리프에 대한 단일 텍스트 표현이 없습니다.

TreeViewerColumns을 트리 열로 사용하는 경우 PatternFilter은 각 열에 ColumnLabelProvider을 사용합니다. 이 경우 당신은 PatternFilter을 하위 클래스 수정하고 그것을 무시됩니다 자신의 isLeafMatch(..)

그렇지 않으면, 열을 정의하는 TreeColumns를 사용하는 경우, TreeViewerITableLabelProvider가 필요합니다. 이 외에도 PatternFilter을 서브 클래스 화하고 다시 메서드를 재정의합니다. isLeafMatch(..)