Dialog mit Dauerschleifen

lukengda

Mitglied
Hallo liebe Community, ich bin recht neu im programmieren und unser Lehrer hat jetzt angefangen uns ins GUI "reinzuwerfen" Fürs Erste sollen wir mir Dialogen arbeiten. Vorweg: Es sind keine HAs, da unsere Klasse seeeeehr langsam ist (sie hängen noch bei einfachen Rechnungen...)

Ich habe einen Taschenrechner programmiert... diesen versuche ich gerade ins grafische (weg von der Konsole) umzusetzen. Mein Problem ist nun jetzt, dass ich ab Zeile 20 eine try-catch Abfrage machen möchte, und bei einem numerformatexception einen Fehler ausgeben möchte und die do-while-Schleife in Gang setzen möchte, damit die Eingaben wiederholt werden müssen.

Ich möchte jetzt mal zu meinem Problem kommen:
Jetzt startet die Schleife nicht nur bei einem Fehler, sondern immer. Wie ist das zu verhindern?
Also wenn in die Zahlenfelder nur Zahlen eingegeben wurden, dann soll er den while-Teil übersprungen werden...

Java:
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Meldung {
    
    public Meldung(){
        double zahl1=0;
        String operator="";
        double zahl2=0;
        @SuppressWarnings("unused")
        boolean exception = false;
        do{
            exception = false;
            JTextField tfzahl1 = new JTextField();
            JTextField tfzahl2 = new JTextField();
            JTextField tfoperator = new JTextField();
            Object[] message = {"1. Zahl", tfzahl1, "\nOperator", tfoperator, "\n2. Zahl", tfzahl2};
            
            JOptionPane pane = new JOptionPane( message, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
            pane.createDialog(null, "Variablenübergabe").setVisible(true);
            System.out.println("Rechne: " + tfzahl1.getText() + " " + tfoperator.getText() + " " + tfzahl2.getText());
            
            try{
            zahl1 = Double.parseDouble(tfzahl1.getText());
            operator = tfoperator.getText();
            zahl2 = Double.parseDouble(tfzahl2.getText());
            }
            catch (NumberFormatException e){
                exception = true;
                Object[] options = {"OK", "Cancel"};

                int ergebnis = JOptionPane.showOptionDialog(null, "Sie müssen eine Ganzzahl eingeben", "Eine Nachricht", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
                if (ergebnis == 1)
                    System.exit(0);
            }
        
        
        
        } while (exception = true);
        
        System.out.println(zahl1 + operator + zahl2);
    
    }
    
    public static void main (String [] args){
        new Meldung();
    }
}

Ich muss mich jetzt schon mal für meinen schrecklichen Code entschuldigen, da ich erst seit 2 Wochen in der Schule programmiere, und es eher auf das Ziel und nicht den Weg ankommt erst mal. 😀

Wenn es nur so ein bescheuerter Fehler ist, werde ich mich mal wieder über mich aufregen, aber manchmal sehe ich halt den Code vor lauter Zeichen nicht...(oder war das der Wald?(Achne, java war ja die Insel!))

Vielen Dank
Lukas
 
Java:
 } while (exception = true);
-->
Java:
 } while (exception == true);
oder
Java:
} while (exception);
der Unterschied sollte klar sein 🙂
 
Oh mann... und ich dachte, ich hätte alles ausprobiert...
Vielen Dank!
Sag mal könntest du mir sagen wie ich in das erste Fenster unten die gleiche Buttonbelegung wie beim Fehlerfenster bekomme? Oder wie ich die int Zahl von den Buttons auswerte? Bei dem zusammengesetzten Fenster ist es mir irgendwie nicht so logisch...
lg
Lukas
 
Sag mal könntest du mir sagen wie ich in das erste Fenster unten die gleiche Buttonbelegung wie beim Fehlerfenster bekomme?
Ähm, naja du könntest dort eben auch dein options-Array übergeben. D.h. also , verschiebe [c]Object[] options = { "OK", "Cancel" };[/c] z.B. nach Zeile 17 und schreibe dann in Zeile 18 so etwas wie
Java:
JOptionPane pane = new JOptionPane(message,JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION,null,options);

Oder wie ich die int Zahl von den Buttons auswerte? Bei dem zusammengesetzten Fenster ist es mir irgendwie nicht so logisch...

Schau(bzw. lies am Besten *g*) dir mal How to Make Dialogs (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) an.

So spontan ohne mir jetzt genau deinen Code angeguckt zu haben(ja der ist teilweise echt etwas durcheinander geraten ^^) könntest du das wohl mit
Code:
pane.getValue()
ermitteln
 

Zurück
Oben