2009-07-01 13 views

Respuesta

11

También puede consultar la clase org.eclipse.jface.fieldassist.AutoCompleteField. No es un combo, solo un campo de texto, pero agrega funcionalidad de autocompletar como si fuera un combo muy fácilmente. Usted puede hacer algo tan simple como esto:

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

Puede estar interesado en la característica de "Asistencia de contenido" de Eclipse. Puedes verlo en acción cuando usas el editor Java de Eclipse IDE. Al editar el código fuente, a veces verá un menú desplegable con frases que completan lo que estaba escribiendo. (Tenga en cuenta que puede presionar Ctrl + Espacio para forzar la visualización del menú desplegable.)

Puede implementar esto también en su propia aplicación SWT/JFace. El "Java Developer's Guide to Eclipse" tiene una aplicación de muestra que implementa Content Assist. La aplicación de ejemplo es un editor SQL, y se describe en el Capítulo 26, "Creación de un Editor de texto personalizado con texto JFace". En realidad, hay un resumen en línea del capítulo here. El proyecto del editor de SQL de ejemplo, com.ibm.jdg2e.editor.jfacetext.sql, se puede encontrar here.

Por otro lado, si desea crear su propio widget Combo y rellenarlo automáticamente en función de la entrada que se está ingresando, puede que esto no sea muy aplicable. Estoy pensando que el org.eclipse.jface.viewers.ComboViewer podría ser útil (aunque no estoy seguro).

6

No creo que haya algo como esto ya sea integrado en Combo o ComboViewer.

Como The Hiatus sugiere org.eclipse.jface.fieldassist.AutoCompleteField es probablemente el mejor lugar para buscar esto, sin embargo, no hay soporte para Combos:

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

Realmente es muy fácil configurar esto.

Como gracias al comentario de paz117, pensé en compartir el código para hacer este trabajo:

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 única pequeña molestia es que usted tiene que llenar por separado el modelo de ComboViewer y AutoCompleteField por separado, pero que puede al menos automatizarse mediante un método de utilidad estático o algo similar.

1

Como referencia para futuros visitantes, el AutocompleteComboInput (SWT Add-on), también puede ser una forma de lograr esto.

AutocompleteComboInput

Fragmento de código de captura de pantalla (consulte enlace de documentación anteriormente para la plantilla de código):

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

El complemento requiere todos los JAR siguiente para ser añadido a la Biblioteca: (more info)

  • Eclipse-equinoccio-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

Haga clic here para el paquete JAR.

Cuestiones relacionadas