Guten Abend zusammen,
ich möchte eine JComboBox dahin erweitern, dass beim Eintippen
a) ein Vorschlag selektiert wird - der erste passende und
b) das model auf passende Items reduziert wird.
Ich habe für a) die Funktion selectionForKey im Interface javax.swing.JComboBox.KeySelectionManager gefunden, um nicht auf Keyboard-Events zurückgreifen zu müssen.
Leider scheint die Funktion nicht aufgerufen zu werden - woran liegt das?
Die Klasse (Ausschnitt):
ich möchte eine JComboBox dahin erweitern, dass beim Eintippen
a) ein Vorschlag selektiert wird - der erste passende und
b) das model auf passende Items reduziert wird.
Ich habe für a) die Funktion selectionForKey im Interface javax.swing.JComboBox.KeySelectionManager gefunden, um nicht auf Keyboard-Events zurückgreifen zu müssen.
Leider scheint die Funktion nicht aufgerufen zu werden - woran liegt das?
Die Klasse (Ausschnitt):
Java:
public class KeySelectComboBox
extends javax.swing.JComboBox
implements javax.swing.JComboBox.KeySelectionManager{
private String searchFor = "";
public KeySelectComboBox(javax.swing.ComboBoxModel model){
super(model);
setKeySelectionManager(this);
model.addListDataListener(this);
setEditable(true);
}
public int selectionForKey(char ch, javax.swing.ComboBoxModel boxModel){
searchFor += ch;
logger.debug("selectionForKey wird ausgeführt...(searchString: " + searchFor + ", char: " + ch +")");
Object selected = this.getSelectedItem();
for (int i=0; i < boxModel.getSize(); i++){
if (boxModel.getElementAt(i).toString().toLowerCase().startsWith(searchFor.toLowerCase())
||(boxModel.getElementAt(i).toString().toLowerCase().contains(" " + searchFor.toLowerCase()))
){
return i;
}
}
return -1;
}
@Override
public void setModel(javax.swing.ComboBoxModel model){
super.setModel(model);
model.addListDataListener(this);
}
@Override
public void intervalAdded(ListDataEvent lde) {
}
@Override
public void intervalRemoved(ListDataEvent lde) {
}
@Override
public void contentsChanged(ListDataEvent lde) {
}
}