1

データ モデル クラス

IObservableList の作成

  1. IObservableList observableList = new WritableList();
  2. observableList にデータを追加する Add メソッド
  3. observableListを返すメソッド

テーブル ビューアー クラス

  1. コンテンツ プロバイダーを ObservableListContentProvider に設定します

GUI クラス

  1. ビューア setInput は、データ モデル クラスから ObservableList を取得します

すべてが期待どおりに機能しているように見えます。テーブル ビューアは、ObservableList への変更で更新されます。

しかし、私が抱えている問題は、GUI でボタンを更新する方法です。データ モデルの ObservableList 内のオブジェクトの数に応じて有効および無効にするボタンがいくつかあります。そのロジックを実行するには、リストにいつ変更があったかを知る必要があります。

GUI クラスに IListChangeListener を実装しようとしました。次に、メソッドを追加します

public void handleListChange(ListChangeEvent arg0) {
  updateButtons();  <-- My method to run the logic

}

IListChangeListener の代わりに何か他のものを実装する必要がありますか?

変更をリッスンするために GUI クラスに何を実装すればよいかわかりません。

編集

ビューアーにリスナーを追加する必要がありますか?

viewer = new AplotDataTableViewer(parent, SWT.BORDER|SWT.V_SCROLL|SWT.FULL_SELECTION);
viewer.setInput(AplotDataModel.getInstance().getObservableList());
viewer.addListener(etc... )

これは私が持っている唯一のオプションです

 addSelectionChangedListener(ISelectionChangeListener listener)

リストが変更された場合のみ、選択の変更は気にしません。

4

1 に答える 1

3

私はこの例を試しましたが、それは私にとってはうまくいきます:

IObservableList observableList = new WritableList();
observableList.addListChangeListener(new IListChangeListener() {

    @Override
    public void handleListChange(ListChangeEvent event) {
        System.out.println(event.diff);
    }
});
observableList.add("element");
observableList.add("element");
observableList.add("element");

TableViewer viewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL);
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setHeaderVisible(true);
viewer.setContentProvider(new ObservableListContentProvider());

TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setText("Column");
column.getColumn().setWidth(200);

column.setLabelProvider(new ColumnLabelProvider());

// Provide the input to the ContentProvider
viewer.setInput(observableList);

アプリケーションの起動時に IListChangeListener が 3 回呼び出され、その後は observableList に要素を追加するたびに呼び出されます。

于 2012-12-13T20:50:55.910 に答える