ツリー ビューアーにダブル クリック リスナーを実装しました。サンプル コード スニペットを以下に示します。
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
ですか?