Ошибка слушателя - Java
Формулировка задачи:
Всем привет. Недавно начал учить Java и столкнулся с одной проблемой при написании калькулятора: в классе CalculatorEngine выдает ошибку в 28 строке. Как я понимаю, она получается когда я пытаюсь нажать клавишу арифметического действия, т.е +,-,*,/ не может преобразовать к типу double. Пытался добавлять условия, не помогло.
Форма
Написал пока только для +. Как мне исправить ошибку?
/**
* Created by Alex on 15.12.2016.
*/
import javax.swing.*;
import java.awt.*;
public class Calculator {
JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton buttonPoint = new JButton(".");
JButton buttonEqualls = new JButton("=");
JButton buttonMinus = new JButton("-");
JButton buttonPlus = new JButton("+");
JButton buttonMultiply = new JButton("*");
JButton buttonDive = new JButton("/");
JTextField display = new JTextField();
Calculator(){
// создали панель добавили менеджер компановки
JPanel panelBoss = new JPanel();
BorderLayout bdLayout = new BorderLayout();
panelBoss.setLayout(bdLayout);
// создаем текстовое поле ввода-вывода
display.setHorizontalAlignment(SwingConstants.RIGHT); // вывод по правой стороне
panelBoss.add("North",display);
// создаем кнопки-цифры
JPanel panelButtonNumber = new JPanel();
GridLayout gdLayout = new GridLayout(4,3);
panelButtonNumber.setLayout(gdLayout);
panelButtonNumber.add(button1);
panelButtonNumber.add(button2);
panelButtonNumber.add(button3);
panelButtonNumber.add(button4);
panelButtonNumber.add(button5);
panelButtonNumber.add(button6);
panelButtonNumber.add(button7);
panelButtonNumber.add(button8);
panelButtonNumber.add(button9);
panelButtonNumber.add(button0);
panelButtonNumber.add(buttonPoint);
panelButtonNumber.add(buttonEqualls);
panelBoss.add("Center",panelButtonNumber);
// выводим кнопки операций (+,-,*,/)
JPanel panelOper = new JPanel();
GridLayout gdLayout2 = new GridLayout(4,1);
panelOper.setLayout(gdLayout2);
buttonPlus.setBackground(Color.orange);
panelOper.add(buttonPlus);
buttonMinus.setBackground(Color.orange);
panelOper.add(buttonMinus);
buttonMultiply.setBackground(Color.orange);
panelOper.add(buttonMultiply);
buttonDive.setBackground(Color.orange);
panelOper.add(buttonDive);
panelBoss.add("East",panelOper);
// создали фрейм, задали размер, размещение, вывели
JFrame frame = new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250,250);
frame.add(panelBoss);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
// подключаем слушателей
CalculatorEngine calculEngine = new CalculatorEngine(this);
button0.addActionListener(calculEngine);
button1.addActionListener(calculEngine);
button2.addActionListener(calculEngine);
button3.addActionListener(calculEngine);
button4.addActionListener(calculEngine);
button5.addActionListener(calculEngine);
button6.addActionListener(calculEngine);
button7.addActionListener(calculEngine);
button8.addActionListener(calculEngine);
button9.addActionListener(calculEngine);
buttonPoint.addActionListener(calculEngine);
buttonEqualls.addActionListener(calculEngine);
buttonPlus.addActionListener(calculEngine);
buttonMinus.addActionListener(calculEngine);
buttonMultiply.addActionListener(calculEngine);
buttonDive.addActionListener(calculEngine);
}
public static void main(String[] args){
Calculator calculator = new Calculator();
}
}import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Created by Alex on 15.12.2016.
*/
public class CalculatorEngine implements ActionListener {
Calculator parent;
double number; //промежуточная розиция
double displayNumber = 0; // первое число
double currentNumber = 0; // второе число
char operNumber = ' '; // арифметическое действие
CalculatorEngine(Calculator parent){
this.parent = parent;
}
public void actionPerformed (ActionEvent evt){
JButton clickedButton = (JButton)evt.getSource();
String clickedButtonLabel = clickedButton.getText();
if (!"".equals(parent.display)) {
displayNumber = Double.parseDouble(clickedButtonLabel);
}
Object scr = evt.getSource();
if(scr == parent.buttonPlus){
operNumber = '+';
currentNumber = displayNumber;
} else if (scr == parent.buttonEqualls){
if(operNumber == '+'){
currentNumber +=displayNumber;
parent.display.setText(Double.toString(currentNumber));
}
}
parent.display.setText(clickedButtonLabel);
}
}Решение задачи: «Ошибка слушателя»
textual
Листинг программы
displayNumber = Double.parseDouble(clickedButtonLabel);