2012-05-31 3 views
0

JFace TreeViewer을 만들 때 SWT 상수를 사용하여 사용자가 트리 항목 (SWT.SINGLE 또는 SWT.MULTI)에 허용 된 단일 또는 다중 선택을 설정할 수 있습니다.선택없이 JFace TreeViewer를 설정하는 방법은 무엇입니까?

내가 선택할 수없는 나무를 원한다면 아무도 도와 줄 수 없습니까? 미리보기 목적으로 사용하고 사용자가 항목을 선택할 수 없어야합니다. 난 정말 이해가 안

답변

3

사전에

많은 감사, 왜 당신은 선택을 억제 싶어,하지만이 작동 할 수 있습니다 방법입니다

viewer.addSelectionChangedListener(new ISelectionChangedListener() { 
    @Override 
    public void selectionChanged(final SelectionChangedEvent event) { 
     if (!event.getSelection().isEmpty()) { 
      v.setSelection(StructuredSelection.EMPTY); 
     } 
    } 
}); 

를 또한 내가 만들 것이에 확인하십시오 뷰어 :

  1. 이 부분의 사이트
  2. 의 선택 공급자로 등록되지는 다른 ISelectionChan을지지 않습니다 gedListener
+0

고맙습니다. 설명하는 것이 긴 이야기이지만,이 상황이 매우 필요하고 필요할 때 상황이 발생했습니다. 사용자가 오해를 할 수있는 트리 뷰어 "미리보기"를위한 것입니다. 다른 큰 트리 뷰어에서이 트리 뷰어를 추출 할 때 다른 것을 사용하지 마십시오 .. 다시 한 번 감사드립니다. – mobaisch

0

시도해 볼까요? 기본적으로 선택 이벤트에 필터를 추가합니다. 뷰어 구현의 경우, org.eclipse.jface.util.OpenStrategy 클래스는 뷰어가 이해하는 선택 이벤트를 발생시킵니다. SWT 선택 이벤트에 필터가 추가되면 뷰어는 기본 선택에 대해 전혀 알지 못할 것입니다. (viewer.setEnabled를 설정하면이 표시 회색 것

Composite c = new Composite(parent, SWT.NONE); 
TreeViewer viewer = new TreeViewer(c, SWT.Border); 
c.setEnabled(false); 

뷰어는 이제 표시되지 않습니다 :

public class SWTSimpleTree { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 

    Tree tree; 
    private Listener filter = new Listener() { 

    @Override 
    public void handleEvent(Event event) { 

     event.type=SWT.None; 
     event.doit=false; 
     event.item = null; 
     tree.deselectAll(); 
    } 
    }; 

    public SWTSimpleTree() { 
    shell.setLayout(new GridLayout()); 

    tree = new Tree(shell, SWT.BORDER); 


    tree.setLayoutData(new GridData(GridData.FILL_BOTH)); 

    TreeItem item = new TreeItem(tree, SWT.NULL); 
    item.setText("ITEM"); 

    TreeItem item2 = new TreeItem(item, SWT.NULL); 
    item2.setText("ITEM2"); 

    TreeItem item3 = new TreeItem(item2, SWT.NULL); 

    item3.setText("ITEM3"); 

    System.out.println("item: " + item.getParent() + ", " + item.getParentItem()); 
    System.out.println("item2: " + item2.getParent() + ", " + item2.getParentItem()); 

    System.out.println(tree.getItemCount()); 
    System.out.println(tree.getItems().length); 

    tree.getDisplay().addFilter(SWT.Selection, filter); 
    tree.getDisplay().addFilter(SWT.DefaultSelection, filter); 


    shell.setSize(300, 200); 
    shell.open(); 
    //textUser.forceFocus(); 

    // Set up the event loop. 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
     // If no more entries in event queue 
     display.sleep(); 
     } 
    } 

    display.dispose(); 
    } 

    private void init() { 

    } 

    public static void main(String[] args) { 
    new SWTSimpleTree(); 
    } 
} 
1

또 다른 쉬운 솔루션은 false로 사용 가능한 상태로 별도의 복합으로 뷰어를 넣어 설정하는 것입니다 회색)이지만 사용자는 뷰어에서 아무 것도 선택할 수 없습니다. 뷰어를 업데이트하고 새로 고치면 올바르게 작동합니다. 그러나 지금 뷰어를 클릭하면 SelectionEvents이 표시되지 않습니다.

관련 문제