Ich bin am verzweifeln!

Seropt

Mitglied
Hallo Leute,

folgendes Programm habe ich geschrieben. Es ist ein einfacher Taschenrechner mit GUI der Klasse JFrame, aber er will nicht so, wie ich will. Ich habe es schon einmal hinbekommen, wie man diesen programmiert, aber jetzt bekomme ich es nicht mehr hin.

Er sieht folgendermaßen aus: Auf einem JFrame sind zwei TextFields nebeneinander aufgelistet, in denen man Werte hineinschreiben kann. Es gibt zwei Buttons, einmal "+" und einmal "=". Das "="-Zeichen möchte ich noch nicht miteinbeziehen (bitte gebt mir dazu noch keinen Lösungsvorschlag). Ich möchte, dass, wenn ich auf den "+"-Button klicke, dass dann auf dem Label das Ergebnis von den beiden TextFields angezeigt wird. Ich kriege das nicht hin, bei mir bleibt das Ergebnis permanent "0".

Wer kann mir helfen?

Ich danke euch für eure Antworten!

Hier der Code:

[Java]

//Klasse mit Main-Funktion

import javax.swing.JFrame;

public class Taschenrechner {

public static void main(String[] args) {

JFrame jf = new TaschenrechnerLook();

jf.setVisible(true);

}

}







//2. Klasse: Elemente + Addition

import java.awt.Color;
import java.awt.TextField;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;

public class TaschenrechnerLook extends JFrame {

JButton jb, jb2;
TextField tf1, tf2;
JLabel jl;
Border border;

public TaschenrechnerLook() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setBounds(500, 50, 300, 500);
setLayout(null);

jb = new JButton("+");
jb.setBounds(100, 200, 70, 70);
add(jb);

jb2 = new JButton("=");
jb2.setBounds(100, 300, 70, 70);
add(jb2);

tf1 = new TextField("0");
tf1.setBounds(20, 50, 100, 100);
add(tf1);

tf2 = new TextField("0");
tf2.setBounds(130, 50, 100, 100);
add(tf2);

jl = new JLabel();
jl.setBounds(20, 380, 200, 70);
add(jl);

jl.setBorder(BorderFactory.createLineBorder(Color.black));

String ergebnisStr = addieren();

jb.addActionListener(new Aktion(tf1, tf2, jl, ergebnisStr));

}

public String addieren() {

int zahl1 = Integer.parseInt(tf1.getText());
int zahl2 = Integer.parseInt(tf2.getText());

int ergebnisInt = zahl1 + zahl2;

String ergebnisString = Integer.toString(ergebnisInt);

return ergebnisString;
}

}




//3. Klasse: Aktion durch Mausklick

import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;

public class Aktion implements ActionListener {

TextField tf1;
TextField tf2;
JLabel jl;
String endergebnis;

public Aktion(TextField tf1, TextField tf2, JLabel jl, String endergebnis) {

this.tf1 = tf1;
this.tf2 = tf2;
this.jl = jl;
this.endergebnis = endergebnis;

this.jl.setText(endergebnis);

}

@Override
public void actionPerformed(ActionEvent arg0) {

jl.getText();

}

}

[/Java]

Liebe Grüße,
Seropt

PS: Ggf. ist das Programm noch nicht so optimal und effizient programmiert. Bitte darauf noch keine Rücksicht nehmen!
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Du berechnest das ergebnis nur genau einmal, nämlich wenn du das Frame erstellst. In dem Moment sind die Textfelder aber natürlich noch leer was immer zu 0 führen muss.

Überlege Dir mal wo und wann du das Ergebnis berechnen musst. Ich denke dann kommst du schnell auf die Lösung.

Gruss

Claus
 
Zuletzt bearbeitet:

Seropt

Mitglied
Danke für deine Antwort Claus! Ich werde es nochmals probieren, ich würde dich oder jemand anderen aber bitten, dies nochmals in Programmcode niederzuschreiben. Ich probiere es dann aus und wenn ich es gar nicht mehr schaffe, dann schaue ich mal auf eure Lösung.

Liebe Grüße,

Seropt
 

Thallius

Top Contributor
Deinen Code must du schon selber schreiben. Ich gebe gerne Hilfe zur Selbsthilfe aber ich bin kein Schreibneger....
 
Zuletzt bearbeitet:

Seropt

Mitglied
Kannst du mir nochmals einen Tipp geben?

Ja, du musst den Code ja nicht abschreiben, vielleicht ist ja nur ein Ding falsch, das ist nicht so viel Arbeit.
Aber du hast recht, man sollte sich selbst dahinterklemmen. Aber ein kleiner Tipp wäre super!

LG Seropt
 

Seropt

Mitglied
Ja, ich kann den Titel nicht mehr ändern! Na ja, ich hoffe, dass die minimalen Antworten nicht nur wegen der Überschrift sind.
Nächstes Mal mache ich einen anderen Titel ;)!
 

Harry Kane

Top Contributor
Die Berechnung des Ergebnisses gehört in die actionPerformed-Methode des ActionListeners.
Du mischst übrigens AWT und Swing-Komponenten. Keine gute Idee. Nimm statt java.awt.TextField javax.swing.JTextField.
 

Seropt

Mitglied
Hey Harry Kane,

danke für deine Antwort! Bevor deine Antwort kam, habe ich es schon herausgefunden gehabt.
Natürlich, ist ja klar, dass das so ist.

Ist es so, dass durch die Übergabe der Parameterwerte im addActionListener der Bezug der Berechnung verloren gegangen ist und somit die leeren Objektvariablen in der 3. Klasse angewandt wurden und somit nur "0" rauskam?
Kann man das so sagen?

Wäre nett, wenn mir jemand noch in wenigen Worten die Logik dahinter erklären könnte.

Dankeschön und noch einen schönen Abend!

LG Seropt
 

Harry Kane

Top Contributor
Ist es so, dass durch die Übergabe der Parameterwerte im addActionListener der Bezug der Berechnung verloren gegangen ist und somit die leeren Objektvariablen in der 3. Klasse angewandt wurden und somit nur "0" rauskam?
Kann man das so sagen?
Sagen kann man das natürlich, die Frage ist, ob der Satz richtig, sinnvoll und verständlich ist. Ich zumindest verstehe aber die Aussage deines Satzes nicht. Warum es bei dir nicht geklappt hat, hat Thallius oben schon auf den Punkt gebracht.
 

Ähnliche Java Themen

Neue Themen


Oben