Hola resulta que estoy haciendo una calculadoora en swing pero tengo unos problemitas con el tema de los calculos, o sea mi intencion es que la persona que la use pueda ir sumando varias cosas o sea pueda hacer 5 + 6 + 8 =19 pero a medida que valla sumando deberia ir mostrando el resultado de la suma sin tener que apretar el boton de = aqui les dejo el codigo se que algo esta fallando debido a que no me suma correctamente. no les puedo dejar el codigo completo porq es muy exteso pero les dejo parte del mismo
Código:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author djagu_26
*/
public class Calculadora extends javax.swing.JFrame {
String operador = "";
String valor1 = "";
String valor2 = "";
DecimalFormatSymbols simbolos = new DecimalFormatSymbols();
DecimalFormat formato;
KeyListener keys = new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_NUMPAD0) {
txtVisor.setText(txtVisor.getText() + "0");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD1) {
txtVisor.setText(txtVisor.getText() + "1");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD2) {
txtVisor.setText(txtVisor.getText() + "2");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD3) {
txtVisor.setText(txtVisor.getText() + "3");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD4) {
txtVisor.setText(txtVisor.getText() + "4");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD5) {
txtVisor.setText(txtVisor.getText() + "5");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD6) {
txtVisor.setText(txtVisor.getText() + "6");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD7) {
txtVisor.setText(txtVisor.getText() + "7");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD8) {
txtVisor.setText(txtVisor.getText() + "8");
}
if (e.getKeyCode() == KeyEvent.VK_NUMPAD9) {
txtVisor.setText(txtVisor.getText() + "9");
}
//Numero del .
if (e.getKeyCode() == 110) {
if (!hayComa(txtVisor.getText())) {
txtVisor.setText(txtVisor.getText() + ",");
}
}
//Numero del +
if (e.getKeyCode() == 107) {
if (valor1.equals("")) {
valor1 = txtVisor.getText();
} else {
valor2 = txtVisor.getText();
}
operador = "+";
txtVisor.setText("");
if (!valor1.equals("") && !valor2.equals("")) {
calcular();
}
}
if (e.getKeyCode() == KeyEvent.VK_MULTIPLY) {
if (valor1.equals("")) {
valor1 = txtVisor.getText();
} else {
valor2 = txtVisor.getText();
}
operador = "*";
txtVisor.setText("");
if (!valor1.equals("") && !valor2.equals("")) {
calcular();
}
}
//Numero del -
if (e.getKeyCode() == 109) {
if (valor1.equals("")) {
valor1 = txtVisor.getText();
} else {
valor2 = txtVisor.getText();
}
operador = "-";
txtVisor.setText("");
if (!valor1.equals("") && !valor2.equals("")) {
calcular();
}
}
if (e.getKeyCode() == KeyEvent.VK_DIVIDE) {
if (valor1.equals("")) {
valor1 = txtVisor.getText();
} else {
valor2 = txtVisor.getText();
}
operador = "/";
txtVisor.setText("");
if (!valor1.equals("") && !valor2.equals("")) {
calcular();
}
}
if (e.getKeyCode() == KeyEvent.VK_DELETE) {
txtVisor.setText("");
operador = "";
valor1 = "";
valor2 = "";
}
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
calcular();
}
}
public void keyReleased(KeyEvent e) {
}
};
/** Creates new form Calculadora */
public Calculadora() {
initComponents();
txtVisor.setText("");
addKeyListener(keys);
simbolos.setDecimalSeparator(',');
formato = new DecimalFormat("####,##", simbolos);
}
public boolean hayComa(String text) {
for (int i = 0; i < text.length(); i++) {
if (String.valueOf(text.charAt(i)).equals(",")) {
return true;
}
}
return false;
}
public void calcular() {
if (!valor1.equals("") && !operador.equals("")) {
double total = 0;
try {
Number primero = formato.parse(valor1);
double valorPrimero = primero.doubleValue();
double valorSegundo = 0;
if (!valor2.equals("")) {
Number segundo = formato.parse(valor2);
valorSegundo = segundo.doubleValue();
} else {
valor2 = txtVisor.getText();
}
if (operador.equals("+")) {
total = valorPrimero + valorSegundo;
}
if (operador.equals("-")) {
total = valorPrimero - valorSegundo;
}
if (operador.equals("*")) {
total = valorPrimero * valorSegundo;
}
if (operador.equals("/")) {
if (valorSegundo != 0) {
total = valorPrimero / valorSegundo;
}
}
} catch (ParseException ex) {
Logger.getLogger(Calculadora.class.getName()).log(Level.SEVERE, null, ex);
}
txtVisor.setText(String.valueOf(total));
valor1 = txtVisor.getText();
valor2 = "";
}
}
}
saludos y muchas gracias