Java SWT双击扩展

Java SWT双击扩展,java,swt,jface,treeviewer,Java,Swt,Jface,Treeviewer,我已经在树查看器上实现了一个双击侦听器,下面是我的示例代码片段 private class DoubleClickListener implements IDoubleClickListener { @Override public void doubleClick(final DoubleClickEvent event) { final IStructuredSelection selection = (IStructuredSelection)eve

我已经在树查看器上实现了一个双击侦听器,下面是我的示例代码片段

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

        final Object sel = selection.getFirstElement();

        final ITreeContentProvider provider = (ITreeContentProvider)treeViewer.getContentProvider();

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

        if (treeViewer.getExpandedState(sel))
            treeViewer.collapseToLevel(sel, AbstractTreeViewer.ALL_LEVELS);
        else
            treeViewer.expandToLevel(sel, 1);
    }
}
我现在有个问题。我从需要双击功能的不同类传递树查看器的对象。因此,我可以使用
event.getSource()
返回发生事件的对象,而不是从不同的类传递树查看器的对象吗?我试图实现它,但没有成功。有人能就如何进行提出建议吗?我不想到处使用树查看器的对象,因为
event.getSource()
返回相应的树查看器对象

更新

是的,我同意你的观点,但我不想将树查看器作为参数传递。因此,我以这种方式实施:

public class doubleClickListener implements IDoubleClickListener
{
    public void doubleClick(DoubleClickEvent event) 
    {
        Object obj = event.getSource();
        if (obj instanceof TreeViewer) 
        {
            TreeViewer eventSrc = (TreeViewer) obj;
            ITreeSelection selec = (ITreeSelection) eventSrc.getSelection();
            if (selec != null && !selec.isEmpty() && selec instanceof IStructuredSelection) 
            {
                IStructuredSelection selection = selec;
                Object item = selection.getFirstElement();              
                if (eventSrc.getExpandedState(item)) 
                {
                    eventSrc.collapseToLevel(item, AbstractTreeViewer.ALL_LEVELS);
                } 
                else 
                {
                    eventSrc.expandToLevel(item, 1);
                }
            }
        }
    }
}

我上面的代码有改进吗?我的意思是创建一个
ITreeSelection
对象并检查该对象是否是
isstructuredselection
的instaceof,这是正确的方法吗?如果没有,检查instanceof
IStructuredSelection
的正确方法是什么?

只需将树查看器作为参数传递给双击构造函数:

公共类DoubleClickListener实现了IDoubleClickListener
{
//要使用的树查看器
私人最终TreeViewer TreeViewer;
公共双击侦听器(TreeViewer)
{
treeViewer=viwer;
}
…双击代码无需更改
}
使用:

treeViewer.addDoubleClickListener(新的DoubleClickListener(treeViewer));
更新:


或者,
DoubleClickEvent
getSource()
方法将是
TreeViewer
(只要侦听器安装在树查看器上!)。

由于我在发布8小时之前无法回答问题,因此我已编辑了我的问题并在那里添加了代码。你能不能尽早调查一下?好的,我会在8小时后补充我的答案。谢谢你的帮助。我需要这张支票吗=空&!selec.isEmpty()?如果不是,那么如果传递null,将如何处理它?您必须阅读树查看器的代码,以确保它是否每次都传递null或空选择。