2012-04-18 4 views
4

私はRCPアプリケーションを持っており、エンティティのウィザードを起動するコマンドを持っています(編集ウィザード、エンティティのすべてのフィールドを表示します)。このエンティティを保存するウィザードを終了します)。私はJFaceデータバインディングを使用してエンティティのフィールドをバインドしてテキストとコンボを交換しています。SWTテキストフィールドの設定とキーへのRCPコマンドのバインド

このコマンドにはハンドラ(ウィザード呼び出しを含む)があり、このハンドラは一部のボタンにバインドされていて、すべて正常に動作します。

次に、このコマンドをいくつかのキーの組み合わせ(Ctrl + Eなど)にバインドする必要があります。私はそれのためorg.eclipse.ui.bindingsの拡張子を使用しています:

<key 
commandId="com.project.command" 
contextId="com.project.view.context" 
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" 
sequence="M1+E"> 
</key> 

「com.project.view.context」を2つの異なるビューで同じキーの組み合わせにバインドするために私が作られ、それは(OKに見えていますこれらの2つのビューで異なるコマンドをアクティブにします)。

しかし、私は、このキーの組み合わせを通じて、私のウィザードを開いたときに問題がある:

SWTのテキストフィールドは、エンティティの整数フィールドにバインドをいけません。 Stringフィールドを使うと、すべてOKです。しかし、整数フィールドはありません(そこには空白があります)。私が試した何

  1. 私はウィザードとウィザードページをデバッグ、およびすべての時間エンティティの状態が 結構です

  2. (その整数フィールドは0またはnull正しいとしません) JFaceバインディング用のStringコンバーターにIntegerを書き込もうとしました。 Didntヘルプ。

    swtTextField.setText(entity.getIntegerField().toString()); 
    

    しかし、これもdidntの仕事:

  3. 私は、このフィールドに結合し、テキストフィールド 値マニュアルをSETING無効JFaceのを試してみました! JFaceバインディングの問題ではないようですが、 SWTテキストの問題ですか?このような状況Debuggin:。 前と後

    entity.getIntegerField()のtoString()= "1234" "のsetText" swtTextField.getText = "" "前と後" のsetText

    (そしてときに私はこれを実行しますないキーの組み合わせ-コマンド呼び出しからデバッグ、 すべてがよさそうだと「のsetText」の後swtTextField.getText =「1234」)

  4. はorg.eclipse.ui.contexts」( をデフォルトに結合拡張子のコンテキストを変更しようとしました.window ")も役に立たなかった。

したがって、ボタン(またはコンテキストメニュー)を使用してコマンドを呼び出すと、すべて正常に動作します。しかし、Integer-> Textフィールド(文字列フィールドはうまく動作します)に問題があります。

何が問題なのですか?

追加されました:問題がキーの組み合わせであることが判明しました。キーの組み合わせに英語以外のキー記号(Ctrl +非英語キーの言語キー記号が含まれているため、アプリケーションで英語以外のキーの組み合わせが使用されているため)が表示された場合、SWT Textは整数値を受け入れません。キーの組み合わせが英語(Ctrl +英語 - キー)の場合、すべてOKです。

他のすべてのコマンド(SWTテキストフィールドなし)あまりにも正常に動作し、それらはあまりにも非英語キーの組み合わせはCtrl +にバインドされています...

、なぜそれは非常に奇妙であると、私はまだ理解してはいけませんhanneps ...

答えて

1

私は数ヶ月前にこの問題にぶつかりました。問題は、JFaceのデータバインディングにありました。何が助けられましたか:

  • Textの観察にはorg.eclipse.core.databinding.observable.value.IObservableValueを使用してください。 BeansObservables.observeValue(yourModel, "yourInt");
  • 使用org.eclipse.core.databinding.DataBindingContextと、このようなあなたのIObservableValueをバインドします:あなたはこのようなコードを書くことができますので、使用org.eclipse.core.databinding.beans.BeansObservablesはあなたのエンティティの値を観察するために
  • :だから、このようなコードを書くことができますので、bindingContext.bindValue(yourTextObserveTextObserveWidget, yourModelTemplateObserveValue, null, null)

Dのマニュアルを確認してください

DataBindingContext bindingContext = new DataBindingContext(); 
IObservableValue yourTextObserveTextObserveWidget = SWTObservables.observeText(yourText, SWT.Modify); 
IObservableValue yourModelTemplateObserveValue = BeansObservables.observeValue(yourModel, "yourInt"); 
bindingContext.bindValue(yourTextObserveWidget, yourModelTemplateObserveValue, null, null); 

Textにあなたのモデルを結合するための最終的なコードは次のようになりますそれ以上の質問があればバインディングをしてください。これは私のプログラムでStringbooleanIntegerのタイプで動作しています。私はanythigをもう一度試していない。

関連する問題