2012-04-18 67 views
4

我有RCP應用程序,並且我有一個命令,它啓動了某個實體的嚮導(編輯嚮導,顯示實體的所有字段,用戶可以更改它並完成嚮導以保存此實體)。我使用JFace數據綁定將實體字段綁定到swt文本和組合。SWT文本字段設置和RCP命令綁定到密鑰

該命令有處理程序(包含嚮導調用),並且此處理程序綁定到某個按鈕,並且都可以正常工作。

然後我需要將此命令綁定到某個組合鍵(例如Ctrl + E)。我使用org.eclipse.ui.bindings extention它:

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

「com.project.view.context」是我做的綁定到相同的密鑰組合在2點不同的觀點,它是看起來確定(並在這兩個視圖中激活不同的命令)。

但是當我通過這個組合鍵打開我的嚮導,還有一個問題:

SWT文本字段不結合到實體的整型字段。有了字符串字段就可以了,而且它們綁定的很好。但整數字段不(其中只有空的空間)。

我已經試過:

  1. 我調試我的嚮導,嚮導頁面,所有的時間實體狀態是 精(它們的整數領域是正確的,而不是0或空)

  2. 試圖將整數寫入字符串轉換器以實現JFace綁定。沒有幫助。

  3. 我試圖禁用的JFace結合這一領域,並塞汀文本字段 值手冊:

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

    但是,這也沒有工作!看起來它不是JFace綁定問題, 但SWT文本問題? Debuggin這種情況:

    entity.getIntegerField()的toString()= 「1234」 之前和之後 「的setText」 swtTextField.getText = 「」 之前和之後 「的setText」

    (當我運行這個調試不從按鍵組合命令調用, 一切看起來不錯,swtTextField.getText =「1234」「的setText」)後

  4. 嘗試變更的結合extention默認 上下文(「org.eclipse.ui.contexts .window「)也沒有幫助。

因此,總結,所有工作正常,當我通過按鈕(或上下文菜單)調用我的命令。但是,當我通過鍵組合綁定擴展調用我的命令時,整數 - >文本字段(字符串字段可以正常工作)存在問題。

有什麼想法有什麼問題嗎?

補充:我發現問題在於組合鍵。當鍵組合包含非英文鍵符號(Ctrl +非英文鍵我的語言鍵符號,導致我們的應用程序使用非英文鍵組合),則出現問題:SWT文本不接受整數值。當組合鍵是英語時(Ctrl +英文鍵) - 一切正常。

所有其它命令(不SWT文本字段)的作品也沒關係,他們都綁定到按Ctrl +非英文鍵組合太...

這是非常奇怪的,我還是不明白,爲什麼hanneps ...

回答

1

幾個月前我遇到過這個問題。問題出在JFace數據綁定上。什麼幫助:

  • 使用org.eclipse.core.databinding.observable.value.IObservableValue觀察您的Text。所以,你可以這樣寫代碼:
  • 使用org.eclipse.core.databinding.beans.BeansObservables來觀察你的實體價值,所以你可以寫這樣的代碼:BeansObservables.observeValue(yourModel, "yourInt");
  • 使用org.eclipse.core.databinding.DataBindingContext和綁定你IObservableValue這樣的:bindingContext.bindValue(yourTextObserveTextObserveWidget, yourModelTemplateObserveValue, null, null)

所以爲模型綁定到Text最終代碼會是這樣:

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

請檢查d的文檔如果您有任何其他問題,請與我們聯繫。這是在我的程序中使用String,booleanInteger類型。我沒有測試任何其他的東西。