Question

Je cherche un Combo (Viewer) dans SWT / JFace qui soutient autocomplete / type d'avance, à savoir l'utilisateur peut saisir quelques caractères et la liste déroulante devrait afficher tous les éléments correspondants.

Était-ce utile?

La solution

Vous pouvez également consulter la classe org.eclipse.jface.fieldassist.AutoCompleteField. Ce n'est pas un combo, juste un champ de texte, mais il ajoute une fonctionnalité complète automatique comme si elle était un combo très facilement. Vous pouvez faire quelque chose d'aussi simple que cela:

Text textField = new Text(parentComposite, SWT.BORDER);
new AutoCompleteField(textField, new TextContentAdapter(), new String[] 
    {"autocomplete option 1", "autocomplete option 2"});

Autres conseils

Je ne pense pas qu'il y ait quelque chose comme ça incorporé à un Combo ou ComboViewer.

Comme thehiatus suggère est probablement le org.eclipse.jface.fieldassist.AutoCompleteField meilleur endroit pour chercher cela, cependant, il y a un soutien pour Combos:

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

Vous pouvez être intéressé par "Content Assist" fonction Eclipse. Vous pouvez le voir en action lors de l'utilisation de Java éditeur de l'IDE Eclipse. Lorsque vous modifiez le code source, vous verrez parfois un menu déroulant avec des phrases qui complètent ce que vous tapez. (Notez que vous pouvez appuyer sur Ctrl + Espace pour forcer le menu déroulant pour afficher.)

Vous pouvez mettre en œuvre dans votre propre application SWT / JFace de même. Le « Java Guide du développeur Eclipse » a une exemple d'application qui implémente l'assistant de contenu . L'exemple d'application est un éditeur SQL, et il est décrit dans le chapitre 26, « Construire un éditeur de texte personnalisé avec JFace texte. » Il y a en fait un aperçu en ligne du chapitre ici . L'exemple de projet d'éditeur de SQL, com.ibm.jdg2e.editor.jfacetext.sql, se trouve ici .

Par contre, si vous voulez créer votre propre widget Combo et remplir automatiquement il fonction de l'entrée qui est entré, cela pourrait ne pas être très applicable. Je pense le pourrait être utile org.eclipse.jface.viewers.ComboViewer (bien que je ne suis pas positif).

Départ: http://sourceforge.net/projects/swtaddons/

Je l'utilise dans mon projet (avec un peu tweak).

Il est vraiment mort facile à mettre en place.

grâce au commentaire de paz117, pensé que je partagerais le code pour faire ce travail:

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

La seule nuisance mineure est que vous devez remplir séparément le modèle de ComboViewer et AutoCompleteField séparément, mais qui peut être au moins automatisée via une méthode utilitaire statique ou quelque chose de similaire.

À titre de référence pour les futurs visiteurs, le AutocompleteComboInput (SWT Add-on), peut aussi être un moyen d'y parvenir.

AutocompleteComboInput

extrait de code capture d'écran (voir lien ci-dessus pour la documentation du modèle de code):

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

L'add-on exige que tous les fichiers JAR ci-dessous pour ajouter à la bibliothèque: ( plus d'infos )

  • Eclipse-équinoxe-3.5.0.jar commun
  • net.sf.swtaddons_0.1.1_bin_src.jar ( sourceforge )
  • org.eclipse.core.commands.jar
  • org.eclipse.jface-3.6.0.jar

Cliquez ici pour pack JAR.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top