Калькулятор в Джава - Java

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, написала калькулятор в Java, но при нажати на "цифровые кнопки", цифры в JTextField не отображаются, а при нажати на "равно" выдает 0.0 ! В чем может быть проблема??
package calculator;
 
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
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 buttonEqual = new JButton("=");
       
        JButton buttonPlus = new JButton("+");
        JButton buttonMinus = new JButton("-");
        JButton buttonMultiply = new JButton("*");
        JButton buttonDivide = new JButton("/");
        JPanel windowContent = new  JPanel();
        JTextField displayField = new JTextField(30);
        
        Calculator(){  // конструктор
            BorderLayout b1 = new BorderLayout();
            windowContent.setLayout(b1); //менеджер расположение для панели
            windowContent.add("North", displayField); //добавляем дисплей в верхней части окна
            
            JPanel p1 = new JPanel();
            GridLayout g1 = new GridLayout(4,3);
            
            p1.setLayout(g1);
            p1.add(button1);
            p1.add(button2);
            p1.add(button3);
            p1.add(button4);
            p1.add(button5);
            p1.add(button6);
            p1.add(button7);
            p1.add(button8);
            p1.add(button9);
            p1.add(button0);
            p1.add(buttonPoint);
            p1.add(buttonEqual);
            windowContent.add("Center",p1);//добавляем панель р1 в центр окна
            JPanel p2 = new JPanel();
            GridLayout g12 = new GridLayout(4,1);
            p2.setLayout(g12);
            p2.add(buttonPlus);
            p2.add(buttonMinus);
            p2.add(buttonMultiply);
            p2.add(buttonDivide);
            windowContent.add("East",p2);
            JFrame frame = new JFrame("Calculator");
            frame.setContentPane(windowContent);
            frame.pack();
            frame.setVisible(true);
            
            ColculatorEngine colcEngine = new ColculatorEngine(this);
            button0.addActionListener(colcEngine);
            button1.addActionListener(colcEngine);
            button2.addActionListener(colcEngine);
            button3.addActionListener(colcEngine);
            button4.addActionListener(colcEngine);
            button5.addActionListener(colcEngine);
            button6.addActionListener(colcEngine);
            button7.addActionListener(colcEngine);
            button8.addActionListener(colcEngine);
            button9.addActionListener(colcEngine);
            
            buttonPoint.addActionListener(colcEngine);
            buttonEqual.addActionListener(colcEngine);
            buttonPlus.addActionListener(colcEngine);
            buttonMinus.addActionListener(colcEngine);
            buttonMultiply.addActionListener(colcEngine);
            buttonDivide.addActionListener(colcEngine);
            
        }
        public static void main(String[] args) {
            Calculator calc =new Calculator();
            
    }
   
}

package calculator;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
 
public class ColculatorEngine implements ActionListener{
    Calculator parent;
    char selectedAction ;
    double curretResult = 0;
    //Конструктор сохраняет ссылку на окно калькулятора в переменной экземпляра класса
    ColculatorEngine(Calculator parent){
        this.parent = parent;//
    }
    public void actionPerformed(ActionEvent e) {
       JButton clickedButton = (JButton)e.getSource();
              
       String dispFieldText = parent.displayField.getText();
       double displayValue = 0;
       if(!"".equals(dispFieldText)){//получить число из дисплея калькулятора, если он нe пустой
       displayValue = Double.parseDouble(dispFieldText);
       }
       Object src = e.getSource();
       // Для каждой кнопки " +,-,*,/" запомнить действие и сохранить текущее число в переменной curretResult, и очистить дисплей для ввода нового числа
       if(src == parent.buttonPlus){
          selectedAction = '+';
          curretResult = displayValue;
          parent.displayField.setText("");
       }else if (src == parent.buttonMinus){
          selectedAction = '-';
          curretResult = displayValue;
          parent.displayField.setText("");
       }else if (src == parent.buttonMultiply){
          selectedAction = '*';
          curretResult = displayValue;
          parent.displayField.setText("");
       }else if (src == parent.buttonDivide){
          selectedAction = '/';
          curretResult = displayValue;
          parent.displayField.setText("");
       }else if (src == parent.buttonEqual){
           //Cовершаем арифметическое действие, в зависимости от selectedAction, обновить переменную curretResult и показать результат на дисплее
           if (selectedAction == '+'){
               curretResult +=displayValue;
               //Сконвертировать результат в строку , добавляя его к пустой строке и показать его
               parent.displayField.setText(""+curretResult);
           }else if(selectedAction == '-'){
                curretResult -=displayValue;
               parent.displayField.setText(""+curretResult);
           }else if(selectedAction == '/'){
                curretResult /=displayValue;
               parent.displayField.setText(""+curretResult);
           }else if(selectedAction == '*'){
                curretResult *=displayValue;
               parent.displayField.setText(""+curretResult);
      
           }else{
               //Для всех цифровых кнопок присоединить надпись на кнопке к надписи в дисплее
               String clickedButtonLabel = clickedButton.getText();
               parent.displayField.setText(dispFieldText+clickedButtonLabel);
 
           }
       }     
          
    }   
     
}

Решение задачи: «Калькулятор в Джава»

textual
Листинг программы
package lesson_java_grafic_calculator;
 
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
/**
 * Created by Александр on 03.01.2017.
 */
public class CalculatorEngine implements ActionListener {
 
 
    Calculator parent;
    char selectedAction = ' '; // +, -, /, или *
    double currentResult = 0;
 
    // Конструктор сохраняет ссылку на окно калькулятора
    // в переменной экземпляра класса
    CalculatorEngine(Calculator parent) {
        this.parent = parent;
 
    }
 
    public void actionPerformed(ActionEvent e) {
 
        //Обработка ошибок
        try {
            // Получить источник действия
            JButton clickedButton = (JButton) e.getSource();
            String dispFieldText = parent.displayField.getText();
            double displayValue = 0;
            
            // Получить число из дисплея калькулятора,
            // если он не пустой.
            // Восклицательный знак – это оператор отрицания
            if (!"".equals(dispFieldText)) {
                displayValue = Double.parseDouble(dispFieldText);
 
            }
 
            Object src = e.getSource();
            // Для каждой кнопки арифметического действия
            // запомнить его: +, -, /, или *, сохранить текущее число
            // в переменной currentResult, и очистить дисплей
            // для ввода нового числа
 
            if (src == parent.buttonPlus) {
                selectedAction = '+';
                currentResult = displayValue;
                parent.displayField.setText("");
 
            } else if (src == parent.buttonMinus) {
                selectedAction = '-';
                currentResult = displayValue;
                parent.displayField.setText("");
 
            } else if (src == parent.buttonDel) {
                selectedAction = '/';
                currentResult = displayValue;
                parent.displayField.setText("");
 
            } else if (src == parent.buttonProiz) {
                selectedAction = '*';
                currentResult = displayValue;
                parent.displayField.setText("");
 
            } else if (src == parent.buttonEqual) {
                // Совершить арифметическое действие, в зависимости
                // от selectedAction, обновить переменную currentResult
                // и показать результат на дисплее
                if (selectedAction == '+') {
                    currentResult += displayValue;
 
                    // Сконвертировать результат в строку, добавляя его
                    // к пустой строке и показать его
                    parent.displayField.setText("" + currentResult);
 
                    } else if (selectedAction == '-') {
                    currentResult -= displayValue;
                    parent.displayField.setText("" + currentResult);
 
                } else if (selectedAction == '/') {
                    currentResult /= displayValue;
                    parent.displayField.setText("" + currentResult);
 
                } else if (selectedAction == '*') {
                    currentResult *= displayValue;
                    parent.displayField.setText("" + currentResult);
                }
            } else {
                // Для всех цифровых кнопок присоединить надпись на
                // кнопке к надписи в дисплее
                String clickedButtonLabel = clickedButton.getText();
                parent.displayField.setText(dispFieldText +
                        clickedButtonLabel);
            }
            if(e.getSource() == parent.buttonPlusMinus ){
                currentResult = - displayValue;
                parent.displayField.setText("" + currentResult);
            }
            // Обнуление дисплея калькулятора
            if (e.getSource() == parent.buttonReset) {
                parent.displayField.setText(null);
            }
 
        } catch (Exception e1){
            parent.displayField.setText(null);
        }
    }
}

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

12   голосов , оценка 3.833 из 5