Автозаполнение JComboBox
Как выполнить автозаполнение в редактируемом JComboBox
в Netbeans 7.1, например, в ComboBox
в сети VB dot. У меня есть поле со списком со списком, я хочу выбрать элемент, набрав только одну первую букву элемента в списке, например, если список имеет kitten
, тогда его следует выбрать, когда я набираю ki
.
Ответы
Ответ 1
Если вы хотите сделать это самостоятельно, вы можете выполнить шаги, описанные в этой статье.
Если вы не хотите изобретать колесо, вы можете использовать существующий 3-й партийный lib, чтобы добавить эту функциональность, как описано в этой статье. Например, используя библиотеку SwingX (пример скопирован из связанной статьи):
this.comboBox = new JComboBox(new Object[] { "Ester", "Jordi",
"Jordina", "Jorge", "Sergi" });
AutoCompleteDecorator.decorate(this.comboBox);
Ответ 2
Я разработал пользовательский swing JComboBox с именем "AutoComboBox", который автоматически завершается, когда вы набираете его, открывая это gist.
Вот небольшая демонстрация.
Сначала объявите и инициализируйте его. (Если вы используете IDE, просто перетащите и поместите класс в форму JFrame или JDialog)
AutoComboBox autoComboBox = new AutoComboBox();
Затем установите список элементов. Он принимает массив строк. Вы можете изменить тип, изменив класс AutoComboBox.
String[] itemArray = {"Malith", "John", "Jack" };
autoComboBox.setKeyWord(itemArray);
Теперь у вас есть автокомпьютер JComboBox с "Малитом", "Джоном", "Джеком" в качестве предметов!
Вот два класса, которые я разработал,
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;
}
}
Ответ 3
Другая классная библиотека, которая просматривает JComboBox:
http://www.jidesoft.com/products/oss.htm
вы можете скачать банку здесь:
http://www.java2s.com/Code/JarDownload/jide/jide-oss-3.5.7.jar.zip
После импорта библиотеки в проект все, что вам нужно сделать, это:
JComboBox comboBox = ....;
ComboBoxSearchable searchable = new ComboBoxSearchable(comboBox);