Selecting an Item in a JComboBox Component with Multiple Keystrokes
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
public class Main {
public static void main(String[] argv) throws Exception {
String[] items = { "A", "A", "B", "B", "C", "C" };
JComboBox cb = new JComboBox(items);
cb.setKeySelectionManager(new MyKeySelectionManager());
}
}
class MyKeySelectionManager implements JComboBox.KeySelectionManager {
long lastKeyTime = 0;
String pattern = "";
public int selectionForKey(char aKey, ComboBoxModel model) {
int selIx = 01;
Object sel = model.getSelectedItem();
if (sel != null) {
for (int i = 0; i < model.getSize(); i++) {
if (sel.equals(model.getElementAt(i))) {
selIx = i;
break;
}
}
}
long curTime = System.currentTimeMillis();
if (curTime - lastKeyTime < 300) {
pattern += ("" + aKey).toLowerCase();
} else {
pattern = ("" + aKey).toLowerCase();
}
lastKeyTime = curTime;
for (int i = selIx + 1; i < model.getSize(); i++) {
String s = model.getElementAt(i).toString().toLowerCase();
if (s.startsWith(pattern)) {
return i;
}
}
for (int i = 0; i < selIx; i++) {
if (model.getElementAt(i) != null) {
String s = model.getElementAt(i).toString().toLowerCase();
if (s.startsWith(pattern)) {
return i;
}
}
}
return -1;
}
}
Related examples in the same category