2012-11-29 133 views
2

我正在與ContentProposalAdapter合作,爲表格中的單元格提供提案。ContentProposalAdapter接受通過鍵盤選擇的提案,但不通過鼠標

當我使用鍵盤(通過鍵盤選擇哪個建議並按回車鍵)時,表格單元格中的值將被替換(由於adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE))。

但是,當我雙擊提案時,單元格中的值保持不變。任何解決方案?

請注意,RCP應用程序基於3.4.0。

回答

0

我解決了同樣的問題ContentProposalAdapter,但是我使用的JFace 3.8(似乎是最新的一個,在Eclipse 4.2中使用朱諾)。你最初的問題可能不是這樣,但我會給你一個機會。

基本上,文本內容提案可以正常使用鼠標事件,例如sambi reddy提供的例子將證明這一點。

但是,如果在表格中將文本用作CellEditor,則在用鼠標單擊選擇其中一個提議後,內容提議彈出窗口會立即關閉。在我的情況下,它是由CellEditor的'FocusOut'偵聽器引起的,無論何時將焦點移出單元格,都會提交編輯的值。當然,這種行爲似乎很自然。但是,除了承諾它也是處置底層的文本控制。事情是在ContentProposalAdapter內使用的彈出窗口正在傾聽它提出的控制處置,並在發生這種情況時自動關閉。而已。

因此,在這種特殊情況下明顯的解決方案是:避免commiting CellEditor的價值,而不是處置底層控制,如果內容的提案彈出是可以通過contentProposalAdapter.isProposalPopupOpen()檢查開放。

1

上述場景在3.7.0中工作。我不知道3.4.0

樣本測試代碼:

public class ContentProposalTest { 

    public static void main(String[] args) { 

    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 
    IContentProposalProvider proposalProvider = new SimpleContentProposalProvider(new String[]{"Test","Test1","Test2","Test4"}); 
    Control text = new Text(shell, SWT.BORDER); 
    ContentProposalAdapter adapter = new ContentProposalAdapter(text, new TextContentAdapter(), proposalProvider, null, null); 
    adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
    } 
} 
+0

我會試一試並回複評論:) –