[英]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.