2017-09-06 10 views
0

트리 뷰어에 선택 수신기를 구현하여 선택시 노드를 확장하거나 축소 할 수 있습니다. 이 충돌은 축소시 잘 작동하지만 노드를 확장하지는 않습니다.JFace TreeViewer 선택시 확장 또는 축소

this.getTree().addListener(SWT.Selection, new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      TreeItem treeItem = (TreeItem) event.item; 
      if (treeItem.getItems().length > 0) { 
       if (MyTreeViewer.this.getExpandedState(treeItem)) { 
        MyTreeViewer.this.collapseToLevel(treeItem, MyTreeViewer.this.ALL_LEVELS); 
       } else { 
        MyTreeViewer.this.expandToLevel(treeItem, 1); 
       } 
       MyTreeViewer.this.refresh(); 
      } 
     } 
    }); 

이 문제를 해결하는 방법에 대한 의견이 있으십니까?

답변

0

JFace TreeViewer의 경우 ISelectionChangedListener 또는 IDoubleClickListener을 사용해야합니다. 기본 Tree Listener는 뷰어와 올바르게 상호 작용하지 않을 수 있으므로 사용하지 마십시오.

public class TreeDoubleClickListener implements IDoubleClickListener 
{ 
    @Override 
    public void doubleClick(final DoubleClickEvent event) 
    { 
    IStructuredSelection selection = (IStructuredSelection)event.getSelection(); 
    if (selection == null || selection.isEmpty()) 
     return; 

    Object sel = selection.getFirstElement(); 

    TreeViewer treeViewer = (TreeViewer)event.getViewer(); 

    IContentProvider provider = treeViewer.getContentProvider(); 

    if (provider instanceof ITreeContentProvider) 
    { 
     ITreeContentProvider treeProvider = (ITreeContentProvider)provider; 

     if (!treeProvider.hasChildren(sel)) 
     return; 

     if (treeViewer.getExpandedState(sel)) 
     treeViewer.collapseToLevel(sel, AbstractTreeViewer.ALL_LEVELS); 
     else 
     treeViewer.expandToLevel(sel, 1); 
    } 
    } 
} 

여기서 중요한 것은 collapseToLevel/expandToLevel에 인수로 선택을 사용하는 것입니다

이 내가 두 번 클릭에 사용하는 것입니다.

ISelectionChangedListener을 구현하여 선택 작업을 구현하십시오.

는 TreeViewer addDoubleClickListener에 리스너를 추가

+0

addSelectionChangedListener이 나를 위해 잘 작동, 감사합니다. ISelectionListener를 사용하기 위해서는 (TreeViewer) event.getViewer()를 (TreeViewer) event.getSelectionProvider()로 변경해야했습니다. – kml