2009-07-01 4 views

ответ

11

Вы также можете ознакомиться с классом 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"}); 
3

Возможно, вас заинтересует Eclipse's "Content Assist". Вы можете увидеть его в действии при использовании редактора Java Eclipse IDE. Когда вы редактируете исходный код, вы иногда увидите раскрывающееся меню с фразами, которые заполняют то, что вы набираете. (Обратите внимание, что вы можете нажать Ctrl + Space, чтобы вывести раскрывающееся меню.)

Вы можете реализовать это в своем собственном приложении SWT/JFace. В «Java Developer's Guide to Eclipse» есть пример приложения, которое реализует Content Assist. Образец приложения является редактором SQL, и он описан в главе 26 «Построение пользовательского текстового редактора с текстом JFace». На самом деле есть онлайн-обзор главы here. Пример проекта редактора SQL, com.ibm.jdg2e.editor.jfacetext.sql, можно найти here.

С другой стороны, если вы хотите создать свой собственный виджет Combo и автоматически заполнить его на основе вводимого ввода, тогда это может быть неприменимо. Я думаю, что org.eclipse.jface.viewers.ComboViewer может быть полезен (хотя я не уверен).

6

Я не думаю, что есть что-то похожее на это в любом Combo или ComboViewer.

Как thehiatus предлагает org.eclipse.jface.fieldassist.AutoCompleteField, вероятно, лучшее место, чтобы смотреть на это, однако, есть поддержка Комбо:

new AutoCompleteField(combo, new ComboContentAdapter(), new String[] 
    {"item0", "item1"}); 
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 отдельно, но может быть как минимум автоматизирован с помощью статического метода полезности или чего-то подобного.

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

Дополнения требует, чтобы все JARs ниже, которые будут добавлены в библиотеку: (more info)

  • затмение-равноденствие-синфазного 3.5.0.jar
  • net.sf.swtaddons_0.1.1_b in_src.jar (sourceforge)
  • org.eclipse.core.commands.jar
  • org.eclipse.jface-3.6.0.jar

Нажмите here для JAR пакета.