ActionListener Bruchrechner Java?

2 Antworten

Verstehe die Frage nicht ganz.

Erstmal der Ansatz ist gut und großes Lob dafür, dass du einen unterscheidenden Listener anstatt hundert WYSIWYG-Anonyme Listener verwendest.
Vielleicht sind Lambdas eine Überlegung wert, aber nicht für Anfänger.

Also du hast deine ganzen UI Elemente und willst, dass du auf Knopfdruck rechnen kannst?
Offensichtlich musst du aus den Eingabefeldern Lesen, konvertieren, rechnen und dann in die Ausgabefelder schreiben. Bei welchem Teil hast du Probleme?

Thomlol 
Fragesteller
 03.12.2019, 22:10

Dass wenn ich auf den Additionsbutton drücke, dieser die Addition ausführt, so wie ich es in der Methode geschrieben habe zur Addition. Wenn ich auf plus drücke, soll genau das ausgeführt werden und der addierte Bruch soll dann am Ende in den jeweiligen 2 Textfields (Zähler und Nenner) erscheinen.

0

1) Swing stellt nicht umsonst die Layout Manager bereit, die solltest du nutzen. Es ist verwunderlich, dass Anfänger immer sofort und zielstrebig in diese schlechte Praktik hineinlaufen.

2) Gib deinen Buttons Namen. So kannst du sie später im Listener wieder identifizieren.

JButton multiplyButton = new JButton("*");
multiplyButton.setName("multiply");

// in actionPerformed:
String name = ((Component)e.getSource()).getName();

switch (name) {
  case "multiply": 
    // multiply with numbers ...
    break;
  case "divide":
    // ...
    break;
  // etc. ...

3) Verwende künftig nicht mehr die Konstruktorüberladung von Integer, die du in actionPerformed nutzt, denn in neueren Java-Versionen wird sie bereits als deprecated eingestuft. Nimm für deinen Fall eher parseInt.

Beispiel:

int number;

try {
  number = Integer.parseInt("some text");
}
catch (NumberFormatException ex) {
  // no valid number, print error message or something else and exit method, then
}

Den try-catch-Block solltest du so und so dazunehmen (auch bei obigem Konstruktoraufruf), andernfalls wird dein Programm unter Fehlern zusammenbrechen, wenn mal keine valide Zahl in einem deiner Textfelder steht.

4) Mache den Frame erst sichtbar, nachdem alle Komponenten angehängt wurden. Andernfalls wird für jede einzelne Komponente, die nachträglich dazukommt erneut das Neuzeichnen des gesamten Frames angestoßen. Diesen Aufwand kann man sich ruhig sparen.

5) Statt jedes Textfeld in einer eigenen, separaten Variable abzulegen, könntest du ein JTextfield-Array anlegen und für das Setup dann mit einer Schleife über dieses laufen. Das würde dir immens viele Zeilen an Code ersparen.