Я ищу 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
может быть полезным (хотя я не уверен).
Ответ 4
Отъезд: http://sourceforge.net/projects/swtaddons/
Я использую его в своем проекте (с небольшой настройкой).
Ответ 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) также может быть способом достижения этого.
Фрагмент кода для снимка экрана (см. ссылку на ссылку выше для шаблона кода):
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.