Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SWT.树中选择SWT.TreeItem_Java_Tree_Swt - Fatal编程技术网

Java 在SWT.树中选择SWT.TreeItem

Java 在SWT.树中选择SWT.TreeItem,java,tree,swt,Java,Tree,Swt,因此,我有以下代码 tree.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { System.out.println("Clicked Item>>" + tree.getSelection()[0].toString()); } });` 如何更改它,使其仅在我在该树中选择树项但在展开或任何其他事件时触发?您可以使

因此,我有以下代码

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

如何更改它,使其仅在我在该
树中选择
树项
但在展开或任何其他事件时触发?

您可以使用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);
以下是一个例子:

根据评论编辑:

根据您使用的模型,您可能会发现所选图元是否具有来自模型图元的子图元。(例如,具有getChildren()或hasChilrden()方法的TreeNode对象)
如果使用ITreeContentProvider作为内容提供程序(这可能是真的),则可以执行以下操作:

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

谢谢还有一个简单的问题,如何检查该元素是否有子元素?再次感谢。