ContentProposalAdapter接受通过键盘选择的提案,但不接受通过鼠标选择的提案

时间:2012-11-29 15:35:30

标签: java eclipse swt rcp

我正在与ContentProposalAdapter合作,为表格中的单元格提供建议。

当我使用键盘(通过键盘选择哪个提案并按回车键)时,值将被替换为表格单元格(由于adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE))。

但是,当我双击提案时,单元格中的值保持不变。任何解决方案吗?

请注意,RCP应用基于3.4.0。

2 个答案:

答案 0 :(得分: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();
  }
}

答案 1 :(得分:0)

我用ContentProposalAdapter解决了同样的问题,但我使用的是JFace 3.8(似乎是Eclipse 4.2 Juno中使用的最新版本)。你最初的问题可能不是这样,但我会试一试。

基本上,文本内容提案可以正常使用鼠标事件,sambi reddy提供的示例将证明这一点。

但是当在桌面内使用Text作为CellEditor时,在您通过鼠标单击选择其中一个提案后,内容提议弹出窗口将立即关闭。在我的情况下,它是由CellEditor的'FocusOut'监听器引起的,每当你将焦点移出单元格时,提交编辑的值。当然,这种行为似乎很自然。但是,除了提交之外,还有处理底层Text控件。事情是ContentProposalAdapter内部使用的弹出窗口正在侦听处理它建议的控制并在发生这种情况时自行关闭。就是这样。

因此,在这种特殊情况下的明显解决方案是:避免提交CellEditor值,如果内容提案弹出窗口已打开且可由contentProposalAdapter.isProposalPopupOpen()检查,则不会处置基础控件。