button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
df = new DecimalFormat("#.##");
try//Dialogboxen wären besser statt diese langen Sätze
{
t = textfeld.getText();
int e = Integer.parseInt(t);
if(e < 0 | e == 0)
{
JOptionPane.showMessageDialog(null, "Bitte");
// textfeld2.setText("Bitte einen Wert größer Null eingeben!!");
}
else
{
textfeld2.setText(t + " KW entsprechen: " + df.format(f2(e)) + " PS");
// textfeld2.setBackground(Color.red);
}
if(e > 999)
{
textfeld2.setText("Bitte einen Wert kleiner 1000 eingeben");
}
else
{
textfeld2.setText(df.format(f2(e)) + " PS");
// textfeld2.setBackground(Color.red);
};
}
catch(NumberFormatException a)
{
textfeld2.setText("Bitte nur Zahlen eingeben, sonst schwerer Ausnahmefehler");
}
}
});
Mein Problem:
Wenn ich einen Wert "<= 0" berechnen möchte soll eine Meldung erscheinen, in Form einer Messagebox,
dass das nicht geht. So weit klappt es auch aber wenn ich die Messagebox bestätige, springt das Programm in die Zeile 29, auch wenn Zeile 15 nicht auskommentiert ist ???:L
Ohne JOptionPane wird problemlos bei einer Eingabe "<=0" immer die Zeile 15 angezeigt.
Es sind beide IFs erfüllt und deshalb werden auch beide
textfeld2.setText(...) Anweisungen ausgeführt.
Und da Java nicht stehenbleibt, um die GUI zu ändern, sondern
alle Änderungen im E(vent D(ispatch T(hread erst dann macht,
wenn deine actionPerformed - Methode vollständig abgelaufen ist,
führst du faktisch folgende Anweisungen aus.
Code:
textfeld2.setText("Bitte einen Wert größer Null eingeben!!");
textfeld2.setText(df.format(f2(e)) + " PS");
...
// Erst jetzt kommt der EDT dazu die setText-Anweisungen auch zu visualisieren
Im Prinzip also nichts anderes als
Code:
int zahl;
zahl = 55;
zahl = 42;
System.out.println(zahl);
Ich habe gedacht, wenn die erste if-Anweisung erfüllt ist wird auch nur diese ausgeführt, egal wie
viele if-Anweisungen noch kommen.
Also wird eigentlich das Programm immer zuerst durchlaufen und dann wird es sozusagen ausgeführt.
Sehe ich das richtig :?:
Und bei mir waren ja beide if-Anweisungen eigentlich erfüllt.
Es wird während des Durchlaufens ausgeführt. Durchlaufen bedeutet ja ausführen,
allerdings wird die Methode setText(...) (und alle anderen die GUI betreffenden) erst sichtbar, sobald die actionPerformed-Methode vollständig
ausgeführt wurde.