1

を使用して RCP アプリケーションを開発していTreeViewerます。Viewer に編集サポートを追加する方法 (およびビューの変更がモデルでどのように更新されるか) を説明する記事は数多くありますが、基になるモデルが変更されたときに Treeview を更新する方法はあまり見つかりません。要するに私の質問:

TreeView ----> モデルの更新 ------ 例がたくさんあります

モデル---->ツリービューの更新-----これは私の質問です

編集:これは私が試したもので、うまくいきます。コメントください

viewer.getTree().addKeyListener(new KeyListener(){

    @Override
    public void keyPressed(KeyEvent e) {

    }

    @Override
    public void keyReleased(KeyEvent e) {

        if(e.keyCode==SWT.F3){
            System.out.println("F3 pressed... new element will be added");
            TreeParent root = (TreeParent) viewer.getInput();
            TreeParent activityRoot = (TreeParent) root.getChildren()[0];
            activityRoot.addChild(new TreeObject("NEW_ACTIVITY"));
            //viewer.update(root, null);
            viewer.refresh();
        }

    }

    });
4

2 に答える 2

4

データ モデルは によって提供されますcontent providerTreeViewerこのデータを変更する手段はありません。独自のコードで行う必要があります。モデルを変更したら、次の方法を使用してTreeViewer、変更について通知できます。

ツリー内の単一のアイテムに表示する必要があるものを変更したばかりの場合は、次を使用します

TreeViewer.update(object, null);

ツリー内のそのアイテムを更新します。複数のオブジェクトを更新するために、これの配列バージョンもあります。

ツリーでオブジェクトを追加または削除した場合は、

TreeViewer.refresh();

ツリー全体を再構築するか、

TreeViewer.refresh(object);

で始まるツリーの部分を更新しobjectます。

オブジェクトの追加と削除についてツリーに伝えるには、

TreeViewer.add(parent, object);
TreeViewer.remove(object);

これらの配列バリアントもあります。

TreeViewer がオブジェクト呼び出しを見つけられるようにするには

TreeViewer.setUseHashlookup(true);

( の前に呼び出す必要がありますTreeViewer.setInput)。これはハッシュテーブルを使用するため、オブジェクトには適切なメソッドが必要hashCodeですequalsTreeViewer.setComparerを使用して、ハッシュ コードと比較を行う別のクラスを指定することもできます。

于 2014-01-18T10:39:19.160 に答える