Taschenrechner mit GUI

kappacell

Mitglied
Hallo, ich sitze an der Aufgabe einen Taschenrechner mit Java eclipse zu schreiben.
Das ist mein Code so weit:
Code:
package taschenrechner;

import java.awt.GridLayout;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Taschenrechner extends JFrame {
    private static final long serialVersionUID = 1L;

    private JLabel labelAusgabe;

    private JButton[] buttonsForNumbers = new JButton[10];
    private JButton buttonPlus, buttonMinus, buttonMal, buttonGeteilt, buttonGleich, buttonClear, buttonBack,
            buttonKomma;

    boolean isFirstNumber = true;
    boolean isOperator = false;
    boolean isSecondNumber = false;
    private String zahl1 = "";
    private String zahl2 = "";
    private String operator = "";
    private double ergebnis;

    public Taschenrechner() {
        super("Ein wunderbarer Taschenrechner");
        initFrame();

        createLabelAusgabe();
        createOptionButtons();
        createNumberButtons();

        pack();
        setVisible(true);
    }

    private void initFrame() {
        setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void createLabelAusgabe() {
       
        labelAusgabe = new JLabel("Zahl eingeben...");
        add(labelAusgabe);
    }

    private void createOptionButtons() {
        JPanel optionPanel = new JPanel();
        optionPanel.setLayout(new GridLayout(2, 4));
        buttonPlus = new JButton("+");
        buttonMinus = new JButton("-");
        buttonMal = new JButton("*");
        buttonGeteilt = new JButton("/");
        buttonGleich = new JButton("=");
        buttonClear = new JButton("C");
        buttonBack = new JButton("<-");
        buttonKomma = new JButton(".");

        optionPanel.add(buttonPlus);
        optionPanel.add(buttonMinus);
        optionPanel.add(buttonGeteilt);
        optionPanel.add(buttonMal);
        optionPanel.add(buttonKomma);
        optionPanel.add(buttonBack);
        optionPanel.add(buttonClear);
        optionPanel.add(buttonGleich);

        addOptionActionListeners();
        add(optionPanel);
    }

    private void addOptionActionListeners() {
        buttonPlus.addActionListener(getOperatorListener());
        buttonMinus.addActionListener(getOperatorListener());
        buttonMal.addActionListener(getOperatorListener());
        buttonGeteilt.addActionListener(getOperatorListener());

        buttonClear.addActionListener(event -> {
            labelAusgabe.setText("Zahl eingeben...");
            zahl1 = zahl2 = operator = "";
           
        });
        buttonBack.addActionListener(event -> {

            if (isOperator) {
                operator = operator.substring(0, operator.length() - 1);
                labelAusgabe.setText(zahl1);
                isOperator = false;
                isFirstNumber = true;
            }

            else if (isFirstNumber) {
                zahl1 = zahl1.substring(0, zahl1.length() - 1);
                labelAusgabe.setText(zahl1);
                isOperator = false;
                isSecondNumber= false;

            } else if (isSecondNumber) {
                zahl2 = zahl2.substring(0, zahl2.length() - 1);
                labelAusgabe.setText(zahl1 + operator + zahl2);
                if (zahl2.length() == 0) {
                    isSecondNumber = false;
                    isOperator = true;
                }

            }

        });

        buttonGleich.addActionListener(event -> {
            double dZahl1 = Double.parseDouble(zahl1);
            double dZahl2 = Double.parseDouble(zahl2);

            switch (operator) {
            case "+":
                ergebnis = dZahl1 + dZahl2;
                break;
            case "-":
                ergebnis = dZahl1 - dZahl2;
                break;
            case "*":
                ergebnis = dZahl1 * dZahl2;
                break;
            case "/":
                ergebnis = dZahl1 / dZahl2;
                break;
            }
            labelAusgabe.setText(zahl1 + operator + zahl2 + "=" + ergebnis);
            isFirstNumber = true;
        });
    }

    private ActionListener getOperatorListener() {
        return (event) -> {
            JButton clickedButton = (JButton) event.getSource();
            operator = clickedButton.getText();
            isFirstNumber = false;
            labelAusgabe.setText(zahl1 + operator);
            isOperator = true;
        };
    }

    private void createNumberButtons() {
        JPanel numberPanel = new JPanel();
        numberPanel.setLayout(new GridLayout(4, 3));
        for (int i = 9; i >= 0; i--) {
            buttonsForNumbers[i] = new JButton(String.valueOf(i));
            buttonsForNumbers[i].addActionListener(getNumberListener());
            numberPanel.add(buttonsForNumbers[i]);
        }
        buttonKomma.addActionListener(getNumberListener());
        numberPanel.add(buttonKomma);
        add(numberPanel);
    }

    private ActionListener getNumberListener() {
        return (event) -> {
            JButton clickedButton = (JButton) event.getSource();
            if (isFirstNumber) {
                zahl1 += clickedButton.getText();
                labelAusgabe.setText(zahl1);
                isFirstNumber= true;
            } else {
                zahl2 += clickedButton.getText();
                labelAusgabe.setText(zahl1 + operator + zahl2);
                isSecondNumber = true;
            }
        };
    }

}

Nun habe ich das Problem, dass bei der Zurücktaste, wenn man bei der 2. Zahl ist, der Operator und der Rest der zahl gleich mit verschwindet, obwohl nur eine Ziffer entfernt werden sollte. Was habe ich Falsch gemacht?
Ebenfalls würde ich gerne Das Label von rechts nach links verschieben, bekomme dies aber irgendwie nicht hin. Danke im vorraus :)
 

MoxxiManagarm

Top Contributor
Ähnliche Java Themen
  Titel Forum Antworten Datum
Exelsior JavaFX Taschenrechner mit FX AWT, Swing, JavaFX & SWT 6
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
thor_norsk Taschenrechner AWT, Swing, JavaFX & SWT 8
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
K JavaFX Taschenrechner textField auf 10stellen begrenzen AWT, Swing, JavaFX & SWT 26
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
N Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 13
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
O JavaFX mini Taschenrechner! AWT, Swing, JavaFX & SWT 35
N Taschenrechner mit mehreren Rechnungen AWT, Swing, JavaFX & SWT 18
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
H Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 5
M Taschenrechner AWT, Swing, JavaFX & SWT 21
T Swing Taschenrechner AWT, Swing, JavaFX & SWT 2
M AWT Java-Taschenrechner, wie Stack richtig verwenden? AWT, Swing, JavaFX & SWT 14
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
H Taschenrechner Coding Erklärung AWT, Swing, JavaFX & SWT 2
Jats Hilfe bei FocusListener für Taschenrechner AWT, Swing, JavaFX & SWT 4
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
S AWT Probleme mit Taschenrechner AWT, Swing, JavaFX & SWT 9
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
C Taschenrechner in Java AWT, Swing, JavaFX & SWT 7
M MouseEvent JButton Taschenrechner AWT, Swing, JavaFX & SWT 5
K Java-Taschenrechner AWT, Swing, JavaFX & SWT 1
L Taschenrechner mit Klammern AWT, Swing, JavaFX & SWT 11
H Taschenrechner AWT, Swing, JavaFX & SWT 5
G Taschenrechner-Problem AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben