在SWT / JFace中寻找支持自动完成的组合(查看器)

时间:2009-07-01 14:07:43

标签: autocomplete swt jface type-ahead

我在SWT / JFace中寻找一个支持自动完成/提前输入的组合(查看器),即用户可以输入几个字符,下拉列表应该显示所有匹配的元素。

6 个答案:

答案 0 :(得分:12)

您还可以查看org.eclipse.jface.fieldassist.AutoCompleteField课程。它不是一个组合,只是一个文本字段,但它添加了自动完整的功能,就好像它是一个组合非常容易。你可以做一些简单的事情:

Text textField = new Text(parentComposite, SWT.BORDER);
new AutoCompleteField(textField, new TextContentAdapter(), new String[] 
    {"autocomplete option 1", "autocomplete option 2"});

答案 1 :(得分:7)

我认为Combo或ComboViewer中没有内置任何内容。

由于thehiatus建议org.eclipse.jface.fieldassist.AutoCompleteField可能是寻找此问题的最佳位置,但是,对Combos有支持:

new AutoCompleteField(combo, new ComboContentAdapter(), new String[] 
    {"item0", "item1"});

答案 2 :(得分:3)

您可能对Eclipse的“内容辅助”功能感兴趣。使用Eclipse IDE的Java编辑器时,您可以看到它的运行情况。在编辑源代码时,您有时会看到一个下拉菜单,其中包含完成您输入内容的短语。 (请注意,您可以按 Ctrl + Space 强制显示下拉菜单。)

您也可以在自己的SWT / JFace应用程序中实现此功能。 “Java Developer's Guide to Eclipse”有一个实现内容辅助的示例应用程序。示例应用程序是SQL编辑器,第26章“使用JFace文本构建自定义文本编辑器”对此进行了描述。实际上有一章here的在线概述。可以找到示例SQL编辑器项目com.ibm.jdg2e.editor.jfacetext.sql {。{3}}。

另一方面,如果您想创建自己的Combo小部件并根据输入的输入自动填充它,那么这可能不太适用。我认为org.eclipse.jface.viewers.ComboViewer可能会有所帮助(虽然我不是肯定的)。

答案 3 :(得分:1)

退房:http://sourceforge.net/projects/swtaddons/

我在我的项目中使用它(稍加调整)。

答案 4 :(得分:1)

设置它真的很容易。

感谢paz117的评论,我想我会分享代码来完成这项工作:

String[] proposals = new String[controller.model().size()];

for (int i = 0; i < controller.model().size(); i++) 
    proposals[i] = controller.model().get(i).getAppropriateName();

comboViewer = new ComboViewer(parent, SWT.NONE);
comboViewer.setContentProvider(new ArrayContentProvider());
comboViewer.setLabelProvider(new AppropriateLabelProvider());
comboViewer.setInput(_controller.model());
// additionally, configure the comboViewer arbitrary
new AutoCompleteField(comboViewer.getCombo(), new ComboContentAdapter(), proposals);

唯一的小麻烦是你必须分别单独填充ComboViewer和AutoCompleteField的模型,但这至少可以通过静态实用程序方法或类似方法自动填充。

答案 5 :(得分:1)

作为未来访问者的参考,AutocompleteComboInput(SWT加载项)也可以实现此目的。

AutocompleteComboInput

屏幕截图的代码段(请参阅上面的代码模板文档链接):

import net.sf.swtaddons.autocomplete.combo.AutocompleteComboInput;
...

subjectCodeCombo = new Combo(tab3Composite, SWT.DROP_DOWN);
// other code modifying Combo appearance here...

// returns a String[] of items retrieved from database
String[] subjectCodeArray = dbQuery.subjectsToArray();

subjectCodeCombo.setItems(subjectCodeArray);
subjectCodeCombo.setText("- SELECT -");
new AutocompleteComboInput(subjectCodeCombo);

加载项要求将以下所有JAR添加到库中:(more info

  • 蚀-春分-共3.5.0.jar
  • net.sf.swtaddons_0.1.1_bin_src.jar(sourceforge
  • org.eclipse.core.commands.jar
  • org.eclipse.jface-3.6.0.jar

点击here获取JAR包。