Gui für Vokabeltrainer (ActionListener)

Auraya

Mitglied
Hallo,
ich bin gerade dabei für mein Vokabeltrainer eine GuI zu basteln. Es ist meine erste GuI, aber es funktioniert einfach nicht. Ich habe Button für einzelne Lektionen erstellt und wenn dort drauf geklickt wird, soll z.B. folgendes passieren:

Java:
if(e.getSource()==lektion1){                liste = new VokabelListe(vokList,1);
                
                int anzahl = Integer.parseInt(feldAnzahlVok.getText());
                    
                if(anzahl>0 && anzahl<500) {
                        anweisung.setText("Bitte die folgende Vokabel übersetzen!");
                        


                   while(anzahl>0) {
                        int zufall = VokabelListe.zufallsZahl();
                        Vokabel aktuelleVokabel=vokList.get(zufall);
                       
                        boolean f = false;
                        while(f==false) {
                            frage.setText(aktuelleVokabel.getDeutsch());
                            
                            if(e.getSource()==bestaetigen) {
                                antwortBenutzer=antwort.getText();
            
                                f=antwortBenutzer.equals(aktuelleVokabel.getFranzoesisch());
                        
                                    if(f==false) {
                                        anweisung.setText("Falsch");
                                    }
                                        else{
                                            anweisung.setText("Richtig!");
                                        } 
                            }
                         } 
                    anzahl--;
                   }

Es funktioniert aber nicht. Das Programm macht dann gar nichts mehr, ich kann es auch nicht mehr beenden (endlos-Schleife?). :(
 

camelCase90

Aktives Mitglied
Wenn der Benutzer eine Falsche Antwort gibt, bleibt f auf false und die while-Schleife, welche die Variable f auf false prüft verläuft in eine Endlosschleife.
 

Auraya

Mitglied
Ok, ich Dusel habe vergessen f auf true zu setzen, wenn es richtig ist. Das soll so sein, das erst die nächste Vokabel angezeigt wird, wenn der Benutzer die richtige Antwort genannt hat. Aber soweit komme ich ja leider gar nicht zu antworten. Sobald ich auf den Button "Lektion 1" klicke, friert das Programm sozusagen ein.
 

camelCase90

Aktives Mitglied
Dafür brauchst du keine While-Schleife. Du musst bloß jedes mal wenn der Benutzer auf den absenden Button klickt, Dir den Inhalt vom Textfeld holen. Wenns falsch war gibst Du eine Fehlermeldung aus und der Benutzer muss die Antwort halt einfach erneut eingeben, solange bis sie richtig ist und wenn das der Fall ist, lässt Du einfach die nächste anzeigen. Das wäre praktisch ein If-Block.

Das Problem, das Du jetzt mit der While-Schleife hast ist, dass der Benutzer eine Eingabe macht, die innerhalb der While-Schleife auf Richtigkeit geprüft wird, ist diese Eingabe einmal falsch (f == false), dann läuft die While-Schleife unendlich durch, weil jedes Mal wieder die selbe Antwort geprüft wird, welche ja nunmal falsch ist.
 
Zuletzt bearbeitet:

Auraya

Mitglied
Okay, ich habe das jetzt mal geändert, immerhin "friert" es jetzt nicht mehr ein. Die erste Vokabel wird mir dann angezeigt, aber wenn ich auf den Button klicke passiert nichts - also es wird nicht angezeigt richtig oder falsch. Irgendwas kann so ja auch nicht stimmen, oder? Wie komme ich denn dann an die nächste Vokabel so?

Java:
if(e.getSource()==lektion1){
                liste = new VokabelListe(vokList,1);
                
                int anzahl = Integer.parseInt(feldAnzahlVok.getText());
                    
                if(anzahl>0 && anzahl<500) {
                        feldAnzahlVok.setEditable(false);
                        anweisung.setText("Bitte die folgende Vokabel übersetzen!");
                        


                   while(anzahl>0) {
                        int zufall = VokabelListe.zufallsZahl();
                        Vokabel aktuelleVokabel=vokList.get(zufall);
                        frage.setText(aktuelleVokabel.getDeutsch());
                            
                            if(e.getSource()==bestaetigen) {
                                
                                    if(antwort.getText().equals(aktuelleVokabel.getFranzoesisch())) {
                                        anweisung.setText("Richtig!");
                                        continue;
                                    }
                                        else{
                                            anweisung.setText("Falsch");
                                        } 
                            }
                    anzahl--;
                    } 


                }
 

Auraya

Mitglied
Ja, okay:

Java:
  private class GuI_Listener implements ActionListener {        
        @Override
         public void actionPerformed(ActionEvent e) {
             
            if(e.getSource()==einblenden){
             Vokabel vokabel;
                for(int i = 0; i<vokList.size();i++) {
                        vokabel=vokList.get(i);
                        vokabeln.append(vokabel.toString()+"\n");
                     } 
                einblenden.setEnabled(false);
                ausblenden.setEnabled(true);
            } 
            
            if(e.getSource()==ausblenden){
                vokabeln.setText("");
                einblenden.setEnabled(true);
                ausblenden.setEnabled(false);
            }
             
            if(e.getSource()==lektion1){
                
                liste = new VokabelListe(vokList,1);
                
                int anzahl = Integer.parseInt(feldAnzahlVok.getText());
                    
                if(anzahl>0 && anzahl<500) {
                        feldAnzahlVok.setEditable(false);
                        anweisung.setText("Bitte die folgende Vokabel übersetzen!");
                        


                   while(anzahl>0) {
                        int zufall = VokabelListe.zufallsZahl();
                        Vokabel aktuelleVokabel=vokList.get(zufall);
                        frage.setText(aktuelleVokabel.getDeutsch());
                            
                            if(e.getSource()==bestaetigen) {
                                
                                    if(antwort.getText().equals(aktuelleVokabel.getFranzoesisch())) {
                                        anweisung.setText("Richtig!");
                                    }
                                        else{
                                            anweisung.setText("Falsch");
                                        } 
                            }
                    anzahl--;
                    } 


                } else {
                            anweisung.setText("Die Zahl ist zu klein oder zu groß! Bitte neue Zahl eingeben und Lektion wählen!"); 
                            lektion1.setEnabled(true);}
                }
          }   
    }
 

camelCase90

Aktives Mitglied
Ich gehe mal davon aus, dass lektion1 ein Button-Objekt ist oder?

Sollte dies der Fall sein, dann steckt die Abfrage ob der Eingabe Button geklickt wurde innerhalb der Abfrage ob der lektion1 Button geklickt wurde und ist somit in dem Moment unerreichbar.

Du musst die Abfragen trennen. Dann wäre da das Problem, dass Du die aktuelle Vokabel nicht mehr abfragen kannst, da du diese innerhalb der Abfrage ob der lektion1 Button geklickt wurde als lokale Variable deklarierst.
 

Auraya

Mitglied
Ja Lektion 1 ist ein Button-Objekt. Also kann man niemals so eine Verschachtelung von Button-Abfragen machen?

Habe nun die Abfrage der Eingabe außerhalb von der Abfrage von Lektion 1 eingefügt und die aktuelle Vokabel ganz am Anfang deklariert. Nun funktioniert es soweit, das die erste Vokabel abgefragt wird und auch angezeigt wird richtig oder falsch.
Allerdings bleibt weiter das Problem wie ich an die nächste Vokabel dran komme? Gibt es da irgendeine Funktion die ich in die while Schleife setzen kann die sozusagen "wartet" und dann dazu ein "mach weiter" der dann in die Abfrage des anderen Buttons kommt?
 
Zuletzt bearbeitet:

camelCase90

Aktives Mitglied
Ne, was Du nun machen musst ist, wieder eine neue Vokabel per Zufall zu erstellen, innerhalb des Blocks, der den Eingabe Button überprüft.

Deshalb wäre es am einfachsten und auch sauberer, wenn Du Dir eine Methode erstellst, die genau das macht , was inner des "if(e.getSource() == lektion1)" Blocks passiert.

Ich würde mir für sowas einen Singleton, also eine Helferklasse erstellen, die dann die Methoden für solche Geschichten enthält.


Lektion 1 soll ja auch nicht ewig gehen oder?

D.h. Du brauchst noch ein Attribut, welches die Anzahl der Vokabeln innerhalb einer Lektion enthält (evtl eine Klasse "Lektion", du könntest dann dort die Logik für die Vokabeln rein machen. Die Methoden um neue Vokabeln zu bekommen, eine Liste, welche die Vokabeln für die aktuelle Lektion enthält etc.)
 
Zuletzt bearbeitet:

Auraya

Mitglied
Nein, die Lektion soll nicht ewig gehen. Der Benutzer gibt in ein Textfeld ein wie viele Vokabeln abgefragt werden sollen. Ich verstehe leider immer noch nicht, wie ich das jetzt machen kann, das solange wie eben die eingebende Anzahl ist neue Vokabeln in das Textfeld gefügt werden. Immer wenn ich eine while Schleife einfüge, friert das Programm ein.

Mit den Singleton verstehe ich leider auch nicht so ganz. Damit lässt sich nur ein Objekt einer Klasse erstellen?

Also ich habe bisher eine Klasse "Franzoesisch" in der nur die main-Methode drin ist.
Dann eine Klasse "Vokabel", die halt die Vokabel "beschreibt". Also Wert für deutsch, Wert für französisch und die getter und setter Methoden.
Dann eine Klasse "VokabelListe" wo je nachdem welche Lektion eine Datei eingelesen wird für die einzelnen Lektionen und dann in einer ArrayList von Vokabeln gespeichert werden. Heißt das, diese Klasse müsste ich als Singleton machen, damit nur ein Objekt davon erstellt wird?
Dann habe ich noch eine Klasse "Vokabeltrainer" wo ich für die Konsole dann eine Methode habe, der die Vokabeln halt abfragt. Aber diese Methode kann ich ja nicht so einfach für die GuI übernehmen.

Also noch eine Klasse GuI wo ich halt die Gui erstellt habe und die Klasse für ActionListener... Ich kriege irgendwie nicht so ganz auf die Reihe wie ich das alles jetzt sozusagen zusammen füge für die GuI. :/
 

camelCase90

Aktives Mitglied
Den Singleton kannst als Helferklasse nutzen (Ja, bei einem Singleton wird nur ein Objekt einer Klasse erstellt). Dem Singleton könntest Du Methoden geben, welche Dir die Vokabeln etc übergeben.

Ich schreib Dir mal morgen Abend einen Beispiel-Code der genau das macht, was Du vor hast. Den kannst Du dann mit deinem abgleichen und schauen was ich anders gemacht habe. Ich werde den dann auch kommentieren, damit du dann genau weißt was wo passiert.

Ich werde allerdings kein aufwendiges GUI erstellen, nur grob. Die Logik ist ja das, was Du benötigst
 

Auraya

Mitglied
Hallo camelCase90,

da ich es leider immer noch nicht hinbekommen habe, würde ich mich über ein Beispiel wirklich sehr freuen. Es muss natürlich kein aufwendiges/schönes Gui sein. Also ich würde mich darüber freuen, wenn du diese Beispiel noch zur Verfügung stellen würdest.

Gruß,
Auraya
 

camelCase90

Aktives Mitglied
Hallo,

Beispiel kommt noch, sry.
War die letzten Tage auf der Arbeit komplett eingespannt, hatte auch versucht es auf der Arbeit zwischen zu quetschen, hatte allerdings zu viel zu tun

Vielleicht schaff ich das heute noch ansonsten morgen, da hab ich mehr auf der Arbeit
 

Auraya

Mitglied
Ähm, ich will ja nicht nerven und so... Arbeit geht natürlich vor. Ich wollte hiermit nur nochmal bekunden, das ich an den Beispiel immer noch Interesse hätte. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
D JavaFX Schadensberechnung für Kartenspiel AWT, Swing, JavaFX & SWT 1
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
L actionListener für Button AWT, Swing, JavaFX & SWT 97
izoards Textfeld für Zeit AWT, Swing, JavaFX & SWT 4
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
Z Switch Case für Buttons AWT, Swing, JavaFX & SWT 8
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
MiMa Package Struktur für GUI Programmierung AWT, Swing, JavaFX & SWT 26
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
B eclipse für JavaFx setuppen AWT, Swing, JavaFX & SWT 4
K Swing Struktur für TreeTable rekursiv aufbauen AWT, Swing, JavaFX & SWT 17
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Ein Patten für das Gluon Mobile Framework AWT, Swing, JavaFX & SWT 7
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
Soloeco JavaFX Dreifachklick für MenuButton erforderlich AWT, Swing, JavaFX & SWT 2
L JavaFX Lösungsvorschläge für dieses coole Control AWT, Swing, JavaFX & SWT 8
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
S Swing Finde Grund für NullPointerExeption nicht. AWT, Swing, JavaFX & SWT 2
W JavaFX (j)Unittests für GUI AWT, Swing, JavaFX & SWT 0
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
SchmidiMC Swing Vorschläge für ein Design AWT, Swing, JavaFX & SWT 5
Z JavaFX Pane für wechselnde Sub-Panes mit Auto-Resize AWT, Swing, JavaFX & SWT 2
S 2D-Grafik affine Transformation für Text-Shape AWT, Swing, JavaFX & SWT 0
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
P Swing Empfehlungen für einfaches Computerspiel AWT, Swing, JavaFX & SWT 4
L DragDropped für jede Node AWT, Swing, JavaFX & SWT 0
temi JavaFX Lösungsansatz für Umsetzung gesucht AWT, Swing, JavaFX & SWT 4
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
L JavaFX Renderer für JavaFX AWT, Swing, JavaFX & SWT 2
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
L Font für Dashboard AWT, Swing, JavaFX & SWT 3
F Swing JColorChooser für die JToggleButtons AWT, Swing, JavaFX & SWT 5
S JavaFX Optimierung für verschiedene Auflösungen AWT, Swing, JavaFX & SWT 12
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Kloso Swing Pseudocode für Strafurzeichnung AWT, Swing, JavaFX & SWT 4
F Konstruktor für "Vier Gewinnt" AWT, Swing, JavaFX & SWT 10
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
R Swing Welche LayoutManager sind die richtigen für mich? AWT, Swing, JavaFX & SWT 11
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
C Slider für Zeitauswahl AWT, Swing, JavaFX & SWT 3
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
OnDemand Gui Themes für FX AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P JavaFX Kalender mit Kacheln für Ereignisse AWT, Swing, JavaFX & SWT 4
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
J Swing Neuen Command für "show"? AWT, Swing, JavaFX & SWT 2
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
H Swing JFileChooser für nicht existierendes Unterverzeichnis AWT, Swing, JavaFX & SWT 3
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
D GUI-Bau für ein Auswertungs-Tool AWT, Swing, JavaFX & SWT 11
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
RalleYTN Swing Menü für Texteditor (Rechtsklick) AWT, Swing, JavaFX & SWT 4
H Applet Flappy Bird für Noobs AWT, Swing, JavaFX & SWT 4
X JavaFX Tooltips für XYChart-Knoten werden nicht angezeigt! AWT, Swing, JavaFX & SWT 3
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
A hilfe für flowlayout AWT, Swing, JavaFX & SWT 6
B EventHandler für durch Tastenkombination erzeugte Zeichen AWT, Swing, JavaFX & SWT 3
T Hintergrund für GUI AWT, Swing, JavaFX & SWT 1
L JavaFX TableView mit Attributs der Modellreferenzerierung für die Spalte AWT, Swing, JavaFX & SWT 3
C JavaFX Character Comparator für TableColumn AWT, Swing, JavaFX & SWT 0
KrokoDiehl JavaFX Gleiche Controller-Instanz für inludiertes FXML AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
S Pfad für Speichervorgang auswählen AWT, Swing, JavaFX & SWT 11
M If für viele TextFields AWT, Swing, JavaFX & SWT 7
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
R JMenuItems für Touchscreen auseinanderziehen AWT, Swing, JavaFX & SWT 3
L LookAndFeel Eigenes Design für die Applikation AWT, Swing, JavaFX & SWT 4
G Grafikformat für AWT-Applet? AWT, Swing, JavaFX & SWT 0
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
Z JavaFX TableView cellValueFactory für Arrays AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben