Калькулятор в Джава - 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);
}
}
}