代码之家  ›  专栏  ›  技术社区  ›  Rabin

选择SWT。SWT.Tree中的TreeItem

  •  1
  • Rabin  · 技术社区  · 10 年前

    所以,我有以下代码

    tree.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            System.out.println("Clicked Item>>" + tree.getSelection()[0].toString());
        }
    });`
    

    如何更改它,使其仅在选择 TreeItem 在此范围内 Tree 但在扩展或其他事件上?

    1 回复  |  直到 10 年前
        1
  •  1
  •   flavio.donze    10 年前

    您可以使用JFace来处理它:

    TreeViewer viewer = new TreeViewer(tree);
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection selection = (IStructuredSelection) event.getSelection();
            System.out.println("Clicked Item>>" + selection.getFirstElement());
        }
    });
    

    不过,您不会使用TreeItems。使用setInput()将模型传递给查看器。设置内容提供者来处理模型,设置标签提供者来处理显示的内容。

    viewer.setLabelProvider(labelProvider);
    viewer.setContentProvider(provider);
    viewer.setInput(input);
    

    下面是一个示例: http://www.vogella.com/tutorials/EclipseJFaceTree/article.html

    根据评论编辑:

    根据所使用的模型,您可能会发现所选元素是否具有模型元素的子元素。(例如,具有getChildren()或hasChilden()方法的TreeNode对象)
    如果您使用ITreeContentProvider作为内容提供商(这可能是正确的),可以执行以下操作:

    IStructuredSelection selection = (IStructuredSelection) event.getSelection();
    Object element = selection.getFirstElement();
    System.out.println("Clicked Item>>" + element);
    ((ITreeContentProvider)viewer.getContentProvider()).hasChildren(element);