2009-07-01 4 views

risposta

11

È possibile anche controllare la classe org.eclipse.jface.fieldassist.AutoCompleteField. Non è una combo, solo un campo di testo, ma aggiunge funzionalità di completamento automatico come se fosse una combo molto facilmente. Si può fare qualcosa di semplice come questo:

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

Potreste essere interessati a di Eclipse "Content Assist" funzione. Puoi vederlo in azione quando usi l'editor Java dell'IDE di Eclipse. Man mano che modifichi il codice sorgente, a volte vedrai un menu a discesa con frasi che completano ciò che stavi scrivendo. (Notare che è possibile premere Ctrl + Spazio per forzare la visualizzazione del menu a discesa.)

È possibile implementarlo anche nella propria applicazione SWT/JFace. "Java Developer's Guide to Eclipse" ha un'applicazione di esempio che implementa Content Assist. L'applicazione di esempio è un editor SQL ed è descritta nel capitolo 26, "Creazione di un editor di testo personalizzato con JFace Text". C'è in realtà una panoramica online del capitolo here. Il progetto di esempio dell'editor SQL, com.ibm.jdg2e.editor.jfacetext.sql, può essere trovato here.

D'altra parte, se si desidera creare il proprio widget di Combo e auto-popolare che sulla base di input che viene immesso, allora questo potrebbe non essere molto applicabile. Sto pensando che il org.eclipse.jface.viewers.ComboViewer potrebbe essere utile (anche se non sono positivo).

6

Non credo ci sia nulla di simile integrato in entrambi i Combo o ComboViewer.

Come the hiatus suggerisce org.eclipse.jface.fieldassist.AutoCompleteField è probabilmente il posto migliore per cercare per questo, tuttavia, non v'è il supporto per Combo:

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

È davvero facile impostare questo.

quanto grazie al commento di paz117, ho pensato di condividere il codice per fare questo lavoro:

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

L'unico fastidio minore è che si deve compilare separatamente il modello di ComboViewer e AutoCompleteField separatamente, ma che può essere almeno automatizzato tramite un metodo di utilità statica o qualcosa di simile.

1

come riferimento per i futuri visitatori, il AutocompleteComboInput (SWT Add-on), può anche essere un modo per raggiungere questo obiettivo.

AutocompleteComboInput

Codice snippet screenshot (fare riferimento al collegamento di documentazione di cui sopra per il modello di codice):

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 richiede che tutti i JAR qui sotto per essere aggiunto alla libreria: (more info)

  • eclipse-equinozio-comune-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

Clicca here per JAR confezione.

Problemi correlati