0

専用ビューアの横にツリービューアがあります。ツリービューアで何かを選択すると、このオブジェクトの詳細が専用ビューアに表示されます。TreeViewer tree、、Composite controlおよびMySpecializedViewer viewerはインスタンス変数です。

public TheEverythingViewer(Composite parent) {
    control = new Composite(parent, SWT.NONE);
    control.setLayout(new GridLayout(2, false));

    tree = new TreeViewer(control);
    tree.setContentProvider(new MyContentProvider());
    tree.setLabelProvider(new MyLabelProvider());
    tree.setUseHashlookup(true);
    tree.getControl().setLayoutData(new GridData(GridData.BEGINNING, GridData.FILL, false, true, 1, 1));

    tree.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override public void selectionChanged(SelectionChangedEvent event) {
            try {
                IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                MyClass myInput = (MyClass) sel.getFirstElement();

                if (viewer != null)
                    if (!viewer.getControl().isDisposed())
                        viewer.getControl().dispose();
                viewer = new MySpecializedViewer(control, table);

                control.getShell().layout();
            } catch (Exception e) {
                if (viewer != null)
                    if (!viewer.getControl().isDisposed())
                        viewer.getControl().dispose();
                viewer = null;
            }
        }
    });
}

私は何か間違ったことをしていますか?ただ欲しい:

+--------------+--------------------------------------------+
| + Node       |                                            |
|   - Node     |                                            |
|   + Node     |                       My                   |
|     - Node   |                                            |
|   - Node     |      Specialized                           |
|              |                              Viewer        |
|              |                                            |
|              |                                            |
|              |                                            |
|              |                                            |
|              |                                            |
|              |                                            |
|              |                +--------+                  |
|              |                |        |                  |
|              |                |        |                  |
|              |                |        |                  |
|              |                +--------+                  |
|              |                                            |
|              |                                            |
|              |                                            |
|              |                                            |
+--------------+--------------------------------------------+

専用ビューアには、選択したノードに応じて多かれ少なかれスペースを消費する必要があるテーブルがあります。そして現在、専用ビューアの新しいインスタンスを作成することは、入力を変更するよりもはるかに簡単です(ATMでは機能しません)。

4

1 に答える 1

2

はい、ツリーで選択が変更されるたびにビューアーを再作成するべきではありません。ツリーの選択を既存のビューアーに入力として送信するだけでよく、その時点で、新しい入力でやりたいことが何でもできます。 . また、専用のビューアー コントロールにレイアウト データを設定することもありません。シェル全体を強制的に再レイアウトするのは無駄です。

于 2012-07-07T06:21:24.300 に答える