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