2012-05-31 21 views
0

当创建的JFace TreeViewer,可以使用的SWT常量设置允许用户在树中的项目(或SWT.SINGLESWT.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 gedListeners
+0

谢谢。这是一个很长的故事来解释,但我在的情况下,当我需要这个非常糟糕的和必要的,它是一个TreeViewer中“预览”的宗旨,其中一个选择可以被用户误解,我可以不要使用别的东西,因为我从另一个更大的treeviewer中提取这个treeviewer ..再次感谢 – mobaisch

0

你可以试试这个? 基本上在选择事件中添加过滤器。在浏览器实现的情况下, org.eclipse.jface.util.OpenStrategy类负责发射选择什么样的事件查看器的理解。如果过滤器被添加到SWT选择事件中,Viewer将永远不会知道底层选择。

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:

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

你的观众,现在不会出现灰色(设置viewer.setEnabled会使其灰色),但用户无法在查看器中选择任何内容。更新和刷新查看器工作得很好。但请记住,现在单击进入查看器时不会出现SelectionEvents

相关问题