0

JFaceを作成するTreeViewer場合、SWT定数を使用して、ユーザーがツリー項目(SWT.SINGLEまたはSWT.MULTI)に許可する単一または複数の選択を設定できます。

アイテムがまったく選択できないツリーが欲しいので、誰か助けてくれませんか?プレビュー用に欲しいのですが、ユーザーがそこにあるアイテムを選択できないようにする必要があります。

よろしくお願いします。

4

3 に答える 3

3

なぜ選択を抑制したいのかよくわかりませんが、次のように機能します。

viewer.addSelectionChangedListener(new ISelectionChangedListener() {
    @Override
    public void selectionChanged(final SelectionChangedEvent event) {
        if (!event.getSelection().isEmpty()) {
             v.setSelection(StructuredSelection.EMPTY);
        }
    }
});

これに加えて、私は視聴者が次のことを確認します。

  1. パーツのサイトで選択プロバイダーとして登録されていません
  2. 他のISelectionChangedListenersを受け入れません
于 2012-05-31T12:41:58.187 に答える
1

もう1つの簡単な解決策は、ビューアを別のコンポジットに配置し、その有効状態をfalseに設定することです。

Composite c = new Composite(parent, SWT.NONE);
TreeViewer viewer = new TreeViewer(c, SWT.Border);
c.setEnabled(false);

これで、ビューアは灰色で表示されなくなります(設定viewer.setEnabledすると灰色で表示されます)が、ユーザーはビューアで何も選択できなくなります。ビューアの更新と更新は問題なく機能します。SelectionEventsただし、ビューアをクリックしてもnoがスローされることに注意してください。

于 2013-08-21T15:37:30.880 に答える
0

これを試していただけませんか?基本的に、選択イベントにフィルターを追加します。Viewer実装の場合、org.eclipse.jface.util.OpenStrategyクラスは、Viewerが理解する選択イベントを発生させる役割を果たします。SWT選択イベントにフィルターが追加された場合、ビューアーは基になる選択について知ることはありません。

public class SWTSimpleTree {
  Display display = new Display();
  Shell shell = new Shell(display);

  Tree tree;
  private Listener filter = new Listener() {

    @Override
    public void handleEvent(Event event) {

      event.type=SWT.None;
      event.doit=false;
      event.item = null;
      tree.deselectAll();
    }
  };

  public SWTSimpleTree() {
    shell.setLayout(new GridLayout());

    tree = new Tree(shell, SWT.BORDER);


    tree.setLayoutData(new GridData(GridData.FILL_BOTH));

    TreeItem item = new TreeItem(tree, SWT.NULL);
    item.setText("ITEM");

    TreeItem item2 = new TreeItem(item, SWT.NULL);
    item2.setText("ITEM2");

    TreeItem item3 = new TreeItem(item2, SWT.NULL);

    item3.setText("ITEM3");

    System.out.println("item: " + item.getParent() + ", " + item.getParentItem());
    System.out.println("item2: " + item2.getParent() + ", " + item2.getParentItem());

    System.out.println(tree.getItemCount());
    System.out.println(tree.getItems().length);

    tree.getDisplay().addFilter(SWT.Selection, filter);
    tree.getDisplay().addFilter(SWT.DefaultSelection, filter);


    shell.setSize(300, 200);
    shell.open();
    //textUser.forceFocus();

    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }

    display.dispose();
  }

  private void init() {

  }

  public static void main(String[] args) {
    new SWTSimpleTree();
  }
}
于 2012-06-01T16:38:38.850 に答える