Ich suche nach einer Combo (Viewer) in SWT/JFace, die Autocomplete/Type-Ahead unterstützt, dh der Benutzer kann ein paar Zeichen eingeben und die Dropdown-Liste sollte alle übereinstimmenden Elemente anzeigen.Ich suche nach einer Combo (Viewer) in SWT/JFace, die Autocomplete unterstützt
Antwort
Sie können auch die org.eclipse.jface.fieldassist.AutoCompleteField
Klasse überprüfen. Es ist keine Combo, nur ein Textfeld, aber es fügt Auto-Vervollständigung-Funktionalität hinzu, als ob es eine Kombination sehr leicht wäre. Sie können etwas so einfaches wie dies tun:
Text textField = new Text(parentComposite, SWT.BORDER);
new AutoCompleteField(textField, new TextContentAdapter(), new String[]
{"autocomplete option 1", "autocomplete option 2"});
Sie könnten Interesse an Eclipse "Content Assist" Funktion haben. Sie können es in Aktion sehen, wenn Sie den Java-Editor der Eclipse-IDE verwenden. Wenn Sie den Quellcode bearbeiten, sehen Sie manchmal ein Dropdown-Menü mit Phrasen, die Ihre Eingabe vervollständigen. (Sie können Strg + Leertaste drücken, um das Dropdown-Menü zu erzwingen.)
Sie können dies auch in Ihrer eigenen SWT/JFace-Anwendung implementieren. Die "Java Developer's Guide to Eclipse" verfügt über eine Beispielanwendung, die Content Assist implementiert. Die Beispielanwendung ist ein SQL-Editor und wird in Kapitel 26, "Erstellen eines benutzerdefinierten Texteditors mit JFace Text", beschrieben. Es gibt tatsächlich eine Online-Übersicht des Kapitels here. Das Beispiel-SQL-Editor-Projekt com.ibm.jdg2e.editor.jfacetext.sql
finden Sie unter here.
Wenn Sie auf der anderen Seite ein eigenes Combo-Widget erstellen und es basierend auf der eingegebenen Eingabe automatisch ausfüllen möchten, ist dies möglicherweise nicht sehr hilfreich. Ich denke, die org.eclipse.jface.viewers.ComboViewer
könnte hilfreich sein (obwohl ich nicht positiv bin).
Ich glaube nicht, dass es so etwas in entweder Combo oder ComboViewer gebaut ist.
Wie thehiatus schlägt org.eclipse.jface.fieldassist.AutoCompleteField
ist wahrscheinlich der beste Ort für diese aussehen, jedoch gibt es Unterstützung für Combos:
new AutoCompleteField(combo, new ComboContentAdapter(), new String[]
{"item0", "item1"});
Check out: http://sourceforge.net/projects/swtaddons/
ich es in meinem Projekt verwenden (mit einem kleine zwicken).
Es ist wirklich einfach, dies einzurichten.
Wie dank paz117 Kommentar, dachte ich den Code teilen würde diese Arbeit zu machen:
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);
Das einzige kleine Ärgernis ist, dass Sie separat das Modell ComboViewer und AutoCompleteField separat bevölkern müssen, sondern dass kann zumindest über eine statische Utility-Methode oder etwas ähnliches automatisiert werden.
Als Referenz für zukünftige Besucher, kann die AutocompleteComboInput (SWT Add-on) auch ein Weg sein, dies zu erreichen.
-Code-Snippet für Screenshot (siehe Dokumentation Link oben für die Code-Vorlage):
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);
Die Add-on, dass alle JAR-Dateien unter zur Bibliothek hinzugefügt werden: (more info)
- Eklipse-Äquinoktium-common-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
Klicken Sie here für JAR-Pack.