Ошибка слушателя - 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5