在Eclipse SWT/JFace中具有自动完成功能的TextCellEditor?

leo*_*loy 7 eclipse swt textbox jface

我想要一个具有标准自动完成行为的TextCellEditor,这是当前任何用户在输入单元格中键入建议字符串列表时所期望的.有关我正在使用的一个很好的工作示例,在Javascript中,请参阅此jQuery自动完成小部件.

我找不到一个很好的例子.我只发现了(除了一些微小的变化)这个TextCellEditorWithContentProposal片段.但这还有很多不足之处:

  • 它列出了所有单词,不管单元格中输入的"部分单词"(没有部分匹配)
  • 选择所需单词后,它将附加到部分单词,而不是替换它
  • 交互是丑陋和不直观的.例如,人们会期望Escape键可以删除建议列表; 再次,请参阅Javascript示例; 在这里,它还删除了键入的字母.

我觉得这样一个标准和有用的组件是不可用的.或者也许它可用?有人能指出我更贴切的片段或例子吗?

tko*_*sis 4

您链接到的示例是一个代码片段,旨在展示 API 并指导您根据自己的喜好自定义控件。

您的一些投诉要么无效,要么可以使用公共 API 轻松修复。

让我们详细了解一下它们。

所有提案均已列出,无论键入的文本如何

请注意,在代码片段中org.eclipse.jface.fieldassist.SimpleContentProposalProvider使用了 an:

IContentProposalProvider contentProposalProvider = new SimpleContentProposalProvider(new String[] { "red",
                    "green", "blue" });
cellEditor = new TextCellEditorWithContentProposal(viewer.getTable(), contentProposalProvider, null, null);
Run Code Online (Sandbox Code Playgroud)

正如其 javadoc 中所建议的那样:

旨在将静态字符串列表映射到内容提案

要启用对片段内容的简单过滤,您可以调用:contentProposalProvider.setFiltering(true);

对于任何更复杂的事情,您必须将其替换为您自己的org.eclipse.jface.fieldassist.IContentProposalProvider.

所选内容将附加到单元格内容中,而不是替换它

内容提案行为在org.eclipse.jface.fieldassist.ContentProposalAdapter. 再次简单的方法调用org.eclipse.jface.fieldassist.ContentProposalAdapter.setProposalAcceptanceStyle(int)将实现您的目标行为:

contentProposalAdapter = new ContentProposalAdapter(text, new TextContentAdapter(), contentProposalProvider, keyStroke, autoActivationCharacters);
contentProposalAdapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
Run Code Online (Sandbox Code Playgroud)

取消提案不应删除输入的内容

仅使用 API 很难做到这一点,因为 APIContentProposalAdapter只会将击键传播到打开的窗口ContentProposalPopup而不存储它们。

您必须子类化才能ContentProposalAdapter访问 ContentProposalAdapter.ContentProposalPopup.filterText.


此代码片段中的大多数具有合理默认值的功能也可以通过使用org.eclipse.jface.fieldassist.AutoCompleteField.