autocompletar java swing autocomplete jcombobox
http://www.java2s.com/Code/JarDownload/jide/jide-oss-3.5.7.jar.zip

java - Autocompletar JComboBox



java jcombobox searchable (3)

Si quiere hacer esto usted mismo, puede seguir los pasos explicados en este artículo .

Si no desea reinventar la rueda, puede usar una tercera libra de partido existente para agregar esta funcionalidad como se explica en este artículo . Por ejemplo, utilizando la biblioteca SwingX (ejemplo copiado del artículo vinculado):

this.comboBox = new JComboBox(new Object[] { "Ester", "Jordi", "Jordina", "Jorge", "Sergi" }); AutoCompleteDecorator.decorate(this.comboBox);

¿Cómo realizo el autocompletado en JComboBox editable en Netbeans 7.1 como en ComboBox en VB dot net. Tengo un cuadro combinado con un enlace de lista, quiero seleccionar el elemento escribiendo solo la primera letra del elemento en la lista, por ejemplo, si una lista tiene kitten , entonces debe elegirse cuando ki .


Desarrollé un JComboBox oscilante personalizado llamado " AutoComboBox " que se completa automáticamente a medida que lo escribes al forjar esta idea .

Aquí hay una pequeña demostración.

Primero declarar e inicializarlo . (Si está utilizando un IDE, simplemente arrastre y coloque la clase en su formulario JFrame o JDialog)

AutoComboBox autoComboBox = new AutoComboBox();

A continuación, configure la lista de elementos . Toma una matriz de Cadenas. Puede cambiar el tipo modificando la clase AutoComboBox.

String[] itemArray = {"Malith", "John", "Jack" }; autoComboBox.setKeyWord(itemArray);

¡Ahora tiene un auto que completa JComboBox que tiene "Malith", "John", "Jack" como elementos!

Estas son las dos clases que desarrollé,

El AutoComboBox.java

import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JTextField; public class AutoComboBox extends JComboBox<Object> { String keyWord[] = {"item1", "item2", "item3"}; Vector myVector = new Vector(); public AutoComboBox() { setModel(new DefaultComboBoxModel(myVector)); setSelectedIndex(-1); setEditable(true); JTextField text = (JTextField) this.getEditor().getEditorComponent(); text.setFocusable(true); text.setText(""); text.addKeyListener(new ComboListener(this, myVector)); setMyVector(); } /** * set the item list of the AutoComboBox * @param keyWord an String array */ public void setKeyWord(String[] keyWord) { this.keyWord = keyWord; setMyVectorInitial(); } private void setMyVector() { int a; for (a = 0; a < keyWord.length; a++) { myVector.add(keyWord[a]); } } private void setMyVectorInitial() { myVector.clear(); int a; for (a = 0; a < keyWord.length; a++) { myVector.add(keyWord[a]); } } }

El ComboListener.java

import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JTextField; import org.apache.commons.lang3.text.WordUtils; public class ComboListener extends KeyAdapter { @SuppressWarnings("rawtypes") JComboBox cbListener; @SuppressWarnings("rawtypes") Vector vector; @SuppressWarnings("rawtypes") public ComboListener(JComboBox cbListenerParam, Vector vectorParam) { cbListener = cbListenerParam; vector = vectorParam; } @SuppressWarnings({ "unchecked", "rawtypes" }) public void keyReleased(KeyEvent key) { // TODO Auto-generated method stub String text = ((JTextField)key.getSource()).getText(); cbListener.setModel(new DefaultComboBoxModel(getFilteredList(text))); cbListener.setSelectedIndex(-1); ((JTextField)cbListener.getEditor().getEditorComponent()).setText(text); cbListener.showPopup(); } @SuppressWarnings({ "rawtypes", "unchecked" }) public Vector getFilteredList(String text) { Vector v = new Vector(); for(int a = 0;a<vector.size();a++) { if(vector.get(a).toString().startsWith(text)) { v.add(vector.get(a).toString()); } else if(vector.get(a).toString().startsWith(text.toLowerCase())) { v.add(vector.get(a).toString()); } else if(vector.get(a).toString().startsWith(text.toUpperCase())) { v.add(vector.get(a).toString()); } else if(vector.get(a).toString().startsWith(WordUtils.capitalizeFully(text))) { v.add(vector.get(a).toString()); } else if(vector.get(a).toString().startsWith(WordUtils.uncapitalize(text))) { v.add(vector.get(a).toString()); } } return v; } }