1

eclipse-rcp アプリケーションで検索ダイアログを開発しています。

検索ダイアログには、次のようなコンボボックスがあります。

comboImp = new CCombo(grpColSpet, SWT.BORDER | SWT.READ_ONLY);
comboImp.setBounds(556, 46, 184, 27);
comboImpViewer = new ComboViewer(comboImp);
comboImpViewer.setContentProvider(new ArrayContentProvider());
comboImpViewer.setInput(ImpContentProvider.getInstance().getImps());
comboImpViewer.setLabelProvider(new LabelProvider() {
    @Override
    public String getText(Object element) {
        return ((Imp)element).getImpName();
    }
});

Impデータベースエンティティであり、検索されるメインエンティティへの ManyToOne であり、ImpContentProviderjpa/hibernate を介して組み込みの sqlite データベースと通信するモデルクラスです。

このコンボボックスには のすべてのインスタンスが含まれているはずですがImp空の選択も可能です。その値は、次のようにサービス Bean にバインドされます。

IObservableValue comboImpSelectionObserveWidget = 
    ViewersObservables.observeSingleSelection(comboImpViewer);
IObservableValue filterByImpObserveValue = 
    BeansObservables.observeValue(searchPrep, "imp");
bindingContext.bindValue(comboImpSelectionObserveWidget, filterByImpObserveValue
    , null, null);

ユーザーがコンボをクリックするとすぐに、選択 (最初の要素) が行われます。ビューアーに追加した選択リスナーへの呼び出しを確認できます。私の質問は:

  • 選択が行われた後、ユーザーの考えを変えて、コンボボックスで空の選択を行うにはどうすればよいですか? によって返されるリストに Imp の「偽の」空のインスタンスを追加する必要がありImpContentProviderますか? または、代替手段を実装する必要がありArrayContentProviderますか?

追加の関連する質問は次のとおりです。

  • コンボを呼び出すdeselectAll()clearSelection()、バインドされた Bean に null 値が設定されないのはなぜですか?
4

2 に答える 2

6

ComboViewer.setSelection(StructuredSelection.EMPTY)選択イベントを発生させ、「imp」をnullに設定します。コンボウィジェット選択イベントは、ドロップダウンリストから手動で選択した場合にのみトリガーされると思います。

Converterを使用する

空の選択オブジェクトを定義します。たとえば、EMPTYEnum(ラベルプロバイダーに空の文字列を表示します)

UpdateValueStrategyターゲットからモデルへの定義とIConverter、オブザーバブルをバインドするタイミングを設定できます。コンバーターでは、EMPTYEnumをnullに変換できます。

IConverter:
fromType: Object.class
toType: Object.class

public Object convert(Object fromObject)
{
    if(fromObject instanceof EMPTYEnum)
    {
        return null;
    }
    return fromObject;
}
于 2012-09-27T03:35:02.877 に答える