[英]SWT double-click expansion
我在树查看器上实现了一个双击侦听器,我的示例代码片段如下。
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
的对象并检查该对象是IStructuredSelection
的实例是正确的方法吗? 如果不是,检查 instanceof IStructuredSelection
的正确方法是什么?
只需将树查看器作为参数传递给双击构造函数:
public class DoubleClickListener implements IDoubleClickListener
{
// The tree viewer to work with
private final TreeViewer treeViewer;
public DoubleClickListener(TreeViewer viewer)
{
treeViewer = viwer;
}
... no change needed to doubleClick code
}
使用:
treeViewer.addDoubleClickListener(new DoubleClickListener(treeViewer));
更新:
或者DoubleClickEvent
getSource()
方法将是TreeViewer
(只要侦听器安装在树查看器上!)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.