-1

ツリー ビューアーにダブル クリック リスナーを実装しました。サンプル コード スニペットを以下に示します。

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ですか?

4

1 に答える 1

0

ツリー ビューアーをパラメーターとしてダブルクリック コンストラクターに渡すだけです。

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(リスナーがツリー ビューアにインストールされている限り!) になります。

于 2014-04-03T06:54:48.787 に答える