Interface Eingabe wird doppelt angezeigt

Sin137

Mitglied
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.


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

Jardcore

Top Contributor
Hey Sin137,
ich habe gerade leider keine Zeit um deinen Quellcode komplett zu durchsteigen, was mir aber auffällt ist, dass du ganz oft die selben Abfragen und Aufrufe machst.

Versuche doch deinen Code ein wenig besser zu strukturieren, zum Beispiel indem du Dinge in Methoden auslagerst und den Variablen passende Namen gibst. Was ist zum Beispiel "i" besser wäre irgendwas wie countOfXXX oder numberOfXXX.

Wenn du das gemacht hast findest du den Fehler auch besser und vor allem kannst du das viel besser automatisiert Testen.

Beste Grüße,
Jar
 

Sin137

Mitglied
Danke für den Ratschlag.
Habe jetzt mein Programmcode geordnet und siehe da der Fehler ist mir ins Gesicht gesprungen ^^
Wie ich diesen jetzt behebe weiß ich allerdings noch nicht.

Der Fehler liegt darin, dass ich in einer "match"-Variable den richtigen String speicher, sofern ich diesen mir auf die Combobox mittels .setModel(); anzeigen lassen will, hat er die Eingabe, die ich getätigt habe noch drin.

Beispiel:
Ich gebe ein H ein:
Das H wird in der match-Variable gespeichert am ende wird diese dann angezeigt, da aber noch das eingegebene H da steht wird es nur addiert und nicht ersetzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
S Antlr Grammatik übersetzt ohne Fehler, dennoch wird Zahl nicht als Eingabe erkannt Allgemeine Java-Themen 4
G Problem mit Quellcode, Eingabe wird nicht angezeigt --HELP-- Allgemeine Java-Themen 2
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
N String Array Eingabe Allgemeine Java-Themen 6
W Java Telegram Bot - Eingabe durch User Allgemeine Java-Themen 2
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
G Eingabe auftrennen Allgemeine Java-Themen 3
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
D Flasche Eingabe erkennen Allgemeine Java-Themen 4
K Eingabe mit Char vergleichen klappt nicht! Allgemeine Java-Themen 2
0 Eingabe nicht möglich... Allgemeine Java-Themen 12
C Cmd Eingabe als Administrator Allgemeine Java-Themen 4
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
Cayton Bruchrechner stürzt bei eingabe negativer Zahlen ab Allgemeine Java-Themen 4
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
Z Taschenrechner größere Eingabe Allgemeine Java-Themen 3
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
D zeichenerkennung für umlaute bei eingabe Allgemeine Java-Themen 4
M Eingabe Überprüfen Allgemeine Java-Themen 3
D Batch-Datei Eingabe Allgemeine Java-Themen 2
N IP-Adresse Eingabe abfragen? Allgemeine Java-Themen 4
S Listener Implentierung bei Eingabe in Textfeld Allgemeine Java-Themen 2
P MS Dos Eingabe Allgemeine Java-Themen 7
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
G Überprüfung der Eingabe ob Typ korrekt Allgemeine Java-Themen 4
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
M Programmablauf nach letzter eingabe erst fortsetzten Allgemeine Java-Themen 2
G eingabe Allgemeine Java-Themen 4
K Warten auf die Eingabe aus Fenster.... Allgemeine Java-Themen 2
B TextField ohne Eingabe Allgemeine Java-Themen 7
H Frage zu Wildcard Eingabe in Java! Allgemeine Java-Themen 5
R Eingabe eines Textfeldes mit Inhalt einer Datei vergleichen Allgemeine Java-Themen 4
L javaformular auf website (eingabe per email zusenden) Allgemeine Java-Themen 3
B Java Eingabe HELP ( eclipse ) Allgemeine Java-Themen 4
F JTextField Eingabe automatisch bestaetigen Allgemeine Java-Themen 17
F Unsichtbare Eingabe Allgemeine Java-Themen 10
C Kettenelemente mit Bezeichner durch eingabe? Allgemeine Java-Themen 4
M Suche , bereits während der eingabe ?? Allgemeine Java-Themen 4
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Y MVVM wie wird Eventhandler tausch geregelt Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
N Datentypen If-Statement wird "übersprungen" Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Java wird nicht gefunden Allgemeine Java-Themen 32
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben