Поиск Combo (Viewer) в SWT/JFace, который поддерживает автозаполнение

Я ищу Combo (Viewer) в SWT/JFace, который поддерживает автозаполнение/тип-вперед, то есть пользователь может ввести пару символов, а выпадающий список должен отображать все соответствующие элементы.

Ответ 1

Вы также можете проверить класс 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"});

Ответ 2

Я не думаю, что есть что-то вроде встроенного в Combo или ComboViewer.

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

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

Ответ 3

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

Вы можете реализовать это в своем собственном приложении SWT/JFace. " Руководство разработчика Java для Eclipse" содержит пример приложения, которое реализует Content Assist. Образец приложения является редактором SQL, и он описан в главе 26 "Построение пользовательского текстового редактора с текстом JFace". Там действительно онлайн-обзор главы здесь. Пример проекта редактора SQL, com.ibm.jdg2e.editor.jfacetext.sql, можно найти здесь.

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

Ответ 5

На самом деле очень легко настроить это.

Как и в случае с комментарием 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, но это может быть, по крайней мере, автоматизировано с помощью статического утилитарного метода или чего-то подобного.

Ответ 6

В качестве ссылки для будущих посетителей, 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 ниже: (подробнее)

  • затмение-равноденствие-синфазный 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

Нажмите здесь для пакета JAR.