JComboBox自动完成

如何在Netbeans 7.1中的可编辑JComboBox中执行自动完成,如在VB点networking中的ComboBox中。 我有一个列表绑定的combobox,我想通过在列表中只input一些项目的第一个字母来select项目,例如,如果一个列表有kitten ,那么当我键入ki时应该select它。

如果你想自己做,你可以按照这篇文章中解释的步骤。

如果您不想重新发明轮子,则可以使用现有的第三方库来添加此function,如本文所述 。 例如使用SwingX库(从链接文章中复制的示例):

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

我开发了一个名为“ AutoComboBox ”的自定义的swing JComboBox,当你通过分叉这个要点的时候自动完成。

这是一个小的演示。

首先声明并初始化它 。 (如果您正在使用IDE,只需将该类拖放到您的JFrame或JDialog表单上)

 AutoComboBox autoComboBox = new AutoComboBox(); 

接下来,设置项目列表 。 它需要一个string数组。 您可以通过修改AutoComboBox类来更改types。

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

现在你有一个自动完成的JComboBox有“Malith”,“John”,“Jack”作为项目!

这是我开发的两个类,

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

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

另一个很酷的库,通过JComboBox进行search: http : //www.jidesoft.com/products/oss.htm

你可以在这里下载jar: http : //www.java2s.com/Code/JarDownload/jide/jide-oss-3.5.7.jar.zip

在项目中导入库之后,您只需要执行以下操作:

 JComboBox comboBox = ....; ComboBoxSearchable searchable = new ComboBoxSearchable(comboBox);