Hallo liebe Com,
ich schreibe gerade an einem Programm, dass mit einer Benutzereingabe über editierbaren JComboBoxen gesteuert werden kann. In die jeweilige Combobox sollen Chars/Strings eingegeben werden, die dann die Datenbank ansprechen sollen. Soweit klappt alles.
Mein Problem liegt nun darin, dass sofern ich z.B. ein 'O' eingebe, zeigt die Combobox mir "OO" an anstatt ein einzelnes 'O'. Tätige ich die nächste Eingabe ein 't', so wird aus "OO" ein "Ott".
Dadurch ist die Abfrage auf die Datenbank sehr behindert. Im nachfolgenden zeige ich wie ich die Eingabe handhabe:
Der Algorithmus ist noch nicht Perfekt mit dem Löschen etc.
Aber das Doppelschreib Problem ist mir da auch ein Dorn im Auge. Da ich immer mich auf den aktuellen Eintrag bezieh, übernimmt er logischerweise die doppelten Zeichen.
ich schreibe gerade an einem Programm, dass mit einer Benutzereingabe über editierbaren JComboBoxen gesteuert werden kann. In die jeweilige Combobox sollen Chars/Strings eingegeben werden, die dann die Datenbank ansprechen sollen. Soweit klappt alles.
Mein Problem liegt nun darin, dass sofern ich z.B. ein 'O' eingebe, zeigt die Combobox mir "OO" an anstatt ein einzelnes 'O'. Tätige ich die nächste Eingabe ein 't', so wird aus "OO" ein "Ott".
Dadurch ist die Abfrage auf die Datenbank sehr behindert. Im nachfolgenden zeige ich wie ich die Eingabe handhabe:
Der Algorithmus ist noch nicht Perfekt mit dem Löschen etc.
Aber das Doppelschreib Problem ist mir da auch ein Dorn im Auge. Da ich immer mich auf den aktuellen Eintrag bezieh, übernimmt er logischerweise die doppelten Zeichen.
Java:
public void autoComplete(JComboBox<String> cb){
show = cb;
show.getEditor().getEditorComponent().addKeyListener(new KeyListener(){
@Override
public void keyTyped(KeyEvent e){
}
@Override
public void keyReleased(KeyEvent e){
}
@Override
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_BACK_SPACE){
match = show.getEditor().getItem().toString();
System.out.println("1 "+match);
if(match.length() - 1 < 0){
model = new DefaultComboBoxModel<String>(_model.searchCUST());
show.setModel(model);
show.showPopup();
}else{
match = match.substring(0, match.length()-1);
System.out.println("2 "+match);
i-=2;
System.out.println(i);
if(i%2 == 0){
model = new DefaultComboBoxModel<String>(comboBoxItems);
show.setModel(model);
show.showPopup();
}
if(i%2 == 1){
model= new DefaultComboBoxModel<String>(comboBoxItemsStore);
show.setModel(model);
show.showPopup();
}
}
if(i%2 == 0){
System.out.println(comboBoxItems.size());
}else{
System.out.println(comboBoxItemsStore.size());
}
System.out.println();
System.out.println();
show.getEditor().setItem(match);
System.out.println(match);
}
if(e.getKeyCode() == KeyEvent.VK_ENTER && (!show.getEditor().getItem().equals(""))){
show.getEditor().setItem(show.getSelectedItem());
match = show.getEditor().getItem().toString();
i = match.length();
}
if((e.getKeyCode() >= 65 && e.getKeyCode() <= 90) ||
(e.getKeyCode() >= 96 && e.getKeyCode() <= 120) ||
(e.getKeyCode() >= 48 && e.getKeyCode() <= 57) ||
(e.getKeyChar() == 'ö') || (e.getKeyChar() == 'ä') ||
(e.getKeyChar() == 'ü') || (e.getKeyCode() == 32)){
char c = e.getKeyChar();
System.out.println(c);
System.out.println(i);
match+= c;
System.out.println(match);
System.out.println();
if(i%2 == 0){
comboBoxItems.clear();
for(int j = 0; j < comboBoxItemsStore.size();j++){
if(((String)comboBoxItemsStore.get(j)).contains(match)){
comboBoxItems.add(comboBoxItemsStore.get(j));
}
}
model = new DefaultComboBoxModel<String>(comboBoxItems);
show.setModel(model);
show.showPopup();
}
if(i%2 == 1){
comboBoxItemsStore.clear();
for(int j = 0; j < comboBoxItems.size();j++){
if(((String)comboBoxItems.get(j)).contains(match)){
comboBoxItemsStore.add(comboBoxItems.get(j));
}
}
model= new DefaultComboBoxModel<String>(comboBoxItemsStore );
show.setModel(model);
show.showPopup();
}
if(i%2 == 0){
System.out.println(comboBoxItems.size());
}else{
System.out.println(comboBoxItemsStore.size());
}
System.out.println();
System.out.println();
show.getEditor().setItem(match);
i++;
}
}
});
}