ActionListener Bruchrechner Java?
Ich bin gerade dabei einen Bruchrechner zu programmieren, heißt das zum Beispiel 2 Brüche miteinander multipliziert, addiert usw. werden. Diese Methoden habe ich alle schon fertig geschrieben und möchte nun wissen, wie ich die Buttons die ich auch schon habe mithilfe des ActionListeners diese Methoden zufügen soll. Heißt wenn ich auf den + Button drücke, soll er die Methode ausführen die ich zur Addition bereits geschrieben habe. Ich habe übrigens einen zaehler,zaehler2,nenner,nenner2 und zaehler3 und nenner 3 (Ergebnisse) in meinen Methoden verwendet.
Mein sehr kleiner Ansatz geht so:
if (e.getSource()==zaehler) {
}
und nun weiß ich nicht genau wie ich weitermachen soll.
Danke
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?
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.
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.