13

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

4

6 回答 6

13

您也可以查看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"});
于 2009-09-21T23:15:10.503 回答
7

我不认为 Combo 或 ComboViewer 中内置了类似的东西。

正如 thehiatus 所暗示org.eclipse.jface.fieldassist.AutoCompleteField的,这可能是寻找这个的最佳位置,但是,有对 Combos 的支持:

new AutoCompleteField(combo, new ComboContentAdapter(), new String[] 
    {"item0", "item1"});
于 2011-10-20T19:37:33.903 回答
3

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

您也可以在自己的 SWT/JFace 应用程序中实现这一点。“ Java Developer's Guide to Eclipse ”有一个实现 Content Assist 的示例应用程序。示例应用程序是一个 SQL 编辑器,它在第 26 章“使用 JFace Text 构建自定义文本编辑器”中进行了描述。实际上这里有本章的在线概述。com.ibm.jdg2e.editor.jfacetext.sql可以在此处找到示例 SQL 编辑器项目。

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

于 2009-07-25T23:39:59.423 回答
1

查看:http: //sourceforge.net/projects/swtaddons/

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

于 2013-02-12T16:30:25.787 回答
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);

The only minor nuisance is that you have to separately populate the model of ComboViewer and AutoCompleteField separately, but that can be at least automated via a static utility method or something similar.

于 2013-08-21T21:26:05.347 回答
1

As reference for future visitors, the AutocompleteComboInput (SWT Add-on), can also be a way to achieve this.

AutocompleteComboInput

Code snippet for screenshot (refer to documentation link above for the code template):

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);

The add-on requires all JARs below to be added to the Library: (more info)

  • eclipse-equinox-common-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

Click here for JAR pack.

于 2014-04-16T18:23:39.717 回答