4

デバイスの設定を表すEMFとRCPGUIを使用してモデルを作成しました。GUIには、モデルのタイプ(マスター)のさまざまなデバイスを選択するためのリストがあります。

モデルには、テーブルに表示する必要がある小さなクラスのオブジェクトのリストがあります(詳細)。

tableItems自体を編集する必要があるので、設定を変更するためのチェックボックスなどを備えた小さなGUIパーツがあります。ここでは、テーブルアイテムはマスターであり、GUIに表示されるすべてのフィールドは詳細です。

デバイスのリストで観察可能:

IObservableValue selection = ViewersObservables.observeSingleSelection(availableDevicesList);

テーブル:

IObservableList list = EMFObservables.observeDetailList(Realm.getDefault(), selection,DevicePackage.Literals.LIST);

TableViewer tableViewer = new TableViewer(parent, SWT.SINGLE | SWT.FULL_SELECTION);
tableViewer.setInput(list);

IObservableValue tableSelection = ViewersObservables.observeSingleSelection(tableViewer);

編集:

Spinner field1 = new Spinner(parent, SWT.BORDER);

dbc.bindValue(SWTObservables.observeSelection(field1), EMFObservables.observeDetailValue(Realm.getDefault(), tableSelection, DevicePackage.Literals.Value1));

デバイスの選択を変更すると、テーブルアイテムが置き換えられます。しかし、tableSelectionにはこれに問題があるようです。別のデバイスからのテーブルアイテムの値がまだ含まれている場合もあれば、nullが含まれている場合もあります。また、すべてのフィールドの検証ステータスに応じて有効/無効になるボタンがあります。tableSelectionがこれらのフィールドにnullを入力すると、検証は機能せず、テーブルのエントリが選択されるまでボタンは無効になります。

リストのリスナーを使用して手動で選択範囲を空に設定しようとしましたが、次のようになりました。

tableViewer.setSelection(StructuredSelection.EMPTY, true);

しかし、これは完全な仕事をしません。少なくともすべての「古い」値が置き換えられますが、nullの問題は引き続き発生します。

必要なのは、テーブルアイテムがまだ選択されていないときに、アプリケーションの起動後のように、tableSelectionを空の状態に設定することだけです。

4

1 に答える 1

2

私は自分で解決策を見つけました。問題は実際にはスピナー自体でした。選択範囲が空で値がない場合、nullpointer がスローされました。

ソースがnullの場合にデフォルト値を返すカスタムコンバーター(intからintへ...)を与えることで解決しました。これで、検証が正常に機能し、ボタンの有効状態が正しく設定されました。

于 2011-06-07T08:03:31.093 に答える