Ошибка слушателя - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д