[英]SWT double-click expansion
I have implemented a double click listener on a tree viewer and my example code snippet is below.我在树查看器上实现了一个双击侦听器,我的示例代码片段如下。
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);
}
}
I have an issue now.我现在有一个问题。 I pass the tree viewer's object from different classes which needs double click functionality.
我从需要双击功能的不同类传递树查看器的对象。 So instead of passing tree viewer's object from different classes is there a way I could use
event.getSource()
which returns the object on which the event occurred?因此,不是从不同的类传递树查看器的对象,有没有一种方法可以使用
event.getSource()
返回发生事件的对象? I tried implementing it but in vain.我尝试实施它但徒劳无功。 Can someone please suggest on how to proceed?
有人可以建议如何进行吗? I do not want to use tree viewer's object everywhere because
event.getSource()
returns the respective tree viewer's object.我不想到处使用树查看器的对象,因为
event.getSource()
返回相应的树查看器的对象。
UPDATE更新
Yes I agree to your point but I do not want to pass tree viewer as a parameter.是的,我同意您的观点,但我不想将树查看器作为参数传递。 So I have implemented it this way:
所以我是这样实现的:
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);
}
}
}
}
}
Is there an enhancement to my above code?我上面的代码有改进吗? I mean is creating an object of
ITreeSelection
and checking that object is an instaceof IStructuredSelection
the right way to do?我的意思是创建
ITreeSelection
的对象并检查该对象是IStructuredSelection
的实例是正确的方法吗? If not what could be the right way to check instanceof IStructuredSelection
?如果不是,检查 instanceof
IStructuredSelection
的正确方法是什么?
Just pass the tree viewer as a parameter to the double click constructor:只需将树查看器作为参数传递给双击构造函数:
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
}
To use:使用:
treeViewer.addDoubleClickListener(new DoubleClickListener(treeViewer));
Update:更新:
Alternatively the DoubleClickEvent
getSource()
method will be the TreeViewer
(as long as the the listener is installed on a tree viewer!).或者
DoubleClickEvent
getSource()
方法将是TreeViewer
(只要侦听器安装在树查看器上!)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.