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

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

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

Подскажите пожалуйста, написала калькулятор в Java, но при нажати на "цифровые кнопки", цифры в JTextField не отображаются, а при нажати на "равно" выдает 0.0 ! В чем может быть проблема??
Листинг программы
  1. package calculator;
  2. import java.awt.BorderLayout;
  3. import java.awt.GridLayout;
  4. import javax.swing.JButton;
  5. import javax.swing.JFrame;
  6. import javax.swing.JPanel;
  7. import javax.swing.JTextField;
  8. public class Calculator {
  9.  
  10. JButton button0 = new JButton("0");
  11. JButton button1 = new JButton("1");
  12. JButton button2 = new JButton("2");
  13. JButton button3 = new JButton("3");
  14. JButton button4 = new JButton("4");
  15. JButton button5 = new JButton("5");
  16. JButton button6 = new JButton("6");
  17. JButton button7 = new JButton("7");
  18. JButton button8 = new JButton("8");
  19. JButton button9 = new JButton("9");
  20. JButton buttonPoint = new JButton(".");
  21. JButton buttonEqual = new JButton("=");
  22. JButton buttonPlus = new JButton("+");
  23. JButton buttonMinus = new JButton("-");
  24. JButton buttonMultiply = new JButton("*");
  25. JButton buttonDivide = new JButton("/");
  26. JPanel windowContent = new JPanel();
  27. JTextField displayField = new JTextField(30);
  28. Calculator(){ // конструктор
  29. BorderLayout b1 = new BorderLayout();
  30. windowContent.setLayout(b1); //менеджер расположение для панели
  31. windowContent.add("North", displayField); //добавляем дисплей в верхней части окна
  32. JPanel p1 = new JPanel();
  33. GridLayout g1 = new GridLayout(4,3);
  34. p1.setLayout(g1);
  35. p1.add(button1);
  36. p1.add(button2);
  37. p1.add(button3);
  38. p1.add(button4);
  39. p1.add(button5);
  40. p1.add(button6);
  41. p1.add(button7);
  42. p1.add(button8);
  43. p1.add(button9);
  44. p1.add(button0);
  45. p1.add(buttonPoint);
  46. p1.add(buttonEqual);
  47. windowContent.add("Center",p1);//добавляем панель р1 в центр окна
  48. JPanel p2 = new JPanel();
  49. GridLayout g12 = new GridLayout(4,1);
  50. p2.setLayout(g12);
  51. p2.add(buttonPlus);
  52. p2.add(buttonMinus);
  53. p2.add(buttonMultiply);
  54. p2.add(buttonDivide);
  55. windowContent.add("East",p2);
  56. JFrame frame = new JFrame("Calculator");
  57. frame.setContentPane(windowContent);
  58. frame.pack();
  59. frame.setVisible(true);
  60. ColculatorEngine colcEngine = new ColculatorEngine(this);
  61. button0.addActionListener(colcEngine);
  62. button1.addActionListener(colcEngine);
  63. button2.addActionListener(colcEngine);
  64. button3.addActionListener(colcEngine);
  65. button4.addActionListener(colcEngine);
  66. button5.addActionListener(colcEngine);
  67. button6.addActionListener(colcEngine);
  68. button7.addActionListener(colcEngine);
  69. button8.addActionListener(colcEngine);
  70. button9.addActionListener(colcEngine);
  71. buttonPoint.addActionListener(colcEngine);
  72. buttonEqual.addActionListener(colcEngine);
  73. buttonPlus.addActionListener(colcEngine);
  74. buttonMinus.addActionListener(colcEngine);
  75. buttonMultiply.addActionListener(colcEngine);
  76. buttonDivide.addActionListener(colcEngine);
  77. }
  78. public static void main(String[] args) {
  79. Calculator calc =new Calculator();
  80. }
  81. }
  82.  
  83. package calculator;
  84. import java.awt.event.ActionEvent;
  85. import java.awt.event.ActionListener;
  86. import javax.swing.JButton;
  87. public class ColculatorEngine implements ActionListener{
  88. Calculator parent;
  89. char selectedAction ;
  90. double curretResult = 0;
  91. //Конструктор сохраняет ссылку на окно калькулятора в переменной экземпляра класса
  92. ColculatorEngine(Calculator parent){
  93. this.parent = parent;//
  94. }
  95. public void actionPerformed(ActionEvent e) {
  96. JButton clickedButton = (JButton)e.getSource();
  97. String dispFieldText = parent.displayField.getText();
  98. double displayValue = 0;
  99. if(!"".equals(dispFieldText)){//получить число из дисплея калькулятора, если он нe пустой
  100. displayValue = Double.parseDouble(dispFieldText);
  101. }
  102. Object src = e.getSource();
  103. // Для каждой кнопки " +,-,*,/" запомнить действие и сохранить текущее число в переменной curretResult, и очистить дисплей для ввода нового числа
  104. if(src == parent.buttonPlus){
  105. selectedAction = '+';
  106. curretResult = displayValue;
  107. parent.displayField.setText("");
  108. }else if (src == parent.buttonMinus){
  109. selectedAction = '-';
  110. curretResult = displayValue;
  111. parent.displayField.setText("");
  112. }else if (src == parent.buttonMultiply){
  113. selectedAction = '*';
  114. curretResult = displayValue;
  115. parent.displayField.setText("");
  116. }else if (src == parent.buttonDivide){
  117. selectedAction = '/';
  118. curretResult = displayValue;
  119. parent.displayField.setText("");
  120. }else if (src == parent.buttonEqual){
  121. //Cовершаем арифметическое действие, в зависимости от selectedAction, обновить переменную curretResult и показать результат на дисплее
  122. if (selectedAction == '+'){
  123. curretResult +=displayValue;
  124. //Сконвертировать результат в строку , добавляя его к пустой строке и показать его
  125. parent.displayField.setText(""+curretResult);
  126. }else if(selectedAction == '-'){
  127. curretResult -=displayValue;
  128. parent.displayField.setText(""+curretResult);
  129. }else if(selectedAction == '/'){
  130. curretResult /=displayValue;
  131. parent.displayField.setText(""+curretResult);
  132. }else if(selectedAction == '*'){
  133. curretResult *=displayValue;
  134. parent.displayField.setText(""+curretResult);
  135. }else{
  136. //Для всех цифровых кнопок присоединить надпись на кнопке к надписи в дисплее
  137. String clickedButtonLabel = clickedButton.getText();
  138. parent.displayField.setText(dispFieldText+clickedButtonLabel);
  139. }
  140. }
  141. }
  142. }

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

textual
Листинг программы
  1. package lesson_java_grafic_calculator;
  2.  
  3.  
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import javax.swing.*;
  7.  
  8. /**
  9.  * Created by Александр on 03.01.2017.
  10.  */
  11. public class CalculatorEngine implements ActionListener {
  12.  
  13.  
  14.     Calculator parent;
  15.     char selectedAction = ' '; // +, -, /, или *
  16.     double currentResult = 0;
  17.  
  18.     // Конструктор сохраняет ссылку на окно калькулятора
  19.     // в переменной экземпляра класса
  20.     CalculatorEngine(Calculator parent) {
  21.         this.parent = parent;
  22.  
  23.     }
  24.  
  25.     public void actionPerformed(ActionEvent e) {
  26.  
  27.         //Обработка ошибок
  28.         try {
  29.             // Получить источник действия
  30.             JButton clickedButton = (JButton) e.getSource();
  31.             String dispFieldText = parent.displayField.getText();
  32.             double displayValue = 0;
  33.            
  34.             // Получить число из дисплея калькулятора,
  35.             // если он не пустой.
  36.             // Восклицательный знак – это оператор отрицания
  37.             if (!"".equals(dispFieldText)) {
  38.                 displayValue = Double.parseDouble(dispFieldText);
  39.  
  40.             }
  41.  
  42.             Object src = e.getSource();
  43.             // Для каждой кнопки арифметического действия
  44.             // запомнить его: +, -, /, или *, сохранить текущее число
  45.             // в переменной currentResult, и очистить дисплей
  46.             // для ввода нового числа
  47.  
  48.             if (src == parent.buttonPlus) {
  49.                 selectedAction = '+';
  50.                 currentResult = displayValue;
  51.                 parent.displayField.setText("");
  52.  
  53.             } else if (src == parent.buttonMinus) {
  54.                 selectedAction = '-';
  55.                 currentResult = displayValue;
  56.                 parent.displayField.setText("");
  57.  
  58.             } else if (src == parent.buttonDel) {
  59.                 selectedAction = '/';
  60.                 currentResult = displayValue;
  61.                 parent.displayField.setText("");
  62.  
  63.             } else if (src == parent.buttonProiz) {
  64.                 selectedAction = '*';
  65.                 currentResult = displayValue;
  66.                 parent.displayField.setText("");
  67.  
  68.             } else if (src == parent.buttonEqual) {
  69.                 // Совершить арифметическое действие, в зависимости
  70.                 // от selectedAction, обновить переменную currentResult
  71.                 // и показать результат на дисплее
  72.                 if (selectedAction == '+') {
  73.                     currentResult += displayValue;
  74.  
  75.                     // Сконвертировать результат в строку, добавляя его
  76.                     // к пустой строке и показать его
  77.                     parent.displayField.setText("" + currentResult);
  78.  
  79.                     } else if (selectedAction == '-') {
  80.                     currentResult -= displayValue;
  81.                     parent.displayField.setText("" + currentResult);
  82.  
  83.                 } else if (selectedAction == '/') {
  84.                     currentResult /= displayValue;
  85.                     parent.displayField.setText("" + currentResult);
  86.  
  87.                 } else if (selectedAction == '*') {
  88.                     currentResult *= displayValue;
  89.                     parent.displayField.setText("" + currentResult);
  90.                 }
  91.             } else {
  92.                 // Для всех цифровых кнопок присоединить надпись на
  93.                 // кнопке к надписи в дисплее
  94.                 String clickedButtonLabel = clickedButton.getText();
  95.                 parent.displayField.setText(dispFieldText +
  96.                         clickedButtonLabel);
  97.             }
  98.             if(e.getSource() == parent.buttonPlusMinus ){
  99.                 currentResult = - displayValue;
  100.                 parent.displayField.setText("" + currentResult);
  101.             }
  102.             // Обнуление дисплея калькулятора
  103.             if (e.getSource() == parent.buttonReset) {
  104.                 parent.displayField.setText(null);
  105.             }
  106.  
  107.         } catch (Exception e1){
  108.             parent.displayField.setText(null);
  109.         }
  110.     }
  111. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут