Hallo, ich sitze an der Aufgabe einen Taschenrechner mit Java eclipse zu schreiben.
Das ist mein Code so weit:
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
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