Я ищу Combo (Viewer) в SWT/JFace, который поддерживает автозаполнение/тип-вперед, то есть пользователь может ввести пару символов, а выпадающий список должен показывать все соответствующие элементы.Ищете Combo (Viewer) в SWT/JFace, который поддерживает автозаполнение
ответ
Вы также можете ознакомиться с классом 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"});
Возможно, вас заинтересует 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
может быть полезен (хотя я не уверен).
Я не думаю, что есть что-то похожее на это в любом Combo или ComboViewer.
Как thehiatus предлагает org.eclipse.jface.fieldassist.AutoCompleteField
, вероятно, лучшее место, чтобы смотреть на это, однако, есть поддержка Комбо:
new AutoCompleteField(combo, new ComboContentAdapter(), new String[]
{"item0", "item1"});
Отъезд: http://sourceforge.net/projects/swtaddons/
Я использую его в моем проекте (с маленькая настройка).
Это действительно мертво легко установить это.
Как благодаря комментарию 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 отдельно, но может быть как минимум автоматизирован с помощью статического метода полезности или чего-то подобного.
В качестве ссылки для будущих посетителей 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);
Дополнения требует, чтобы все 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 пакета.