Java - Problemas en Calculadora basica con GUI

 
Vista:
Imágen de perfil de Mr. X

Problemas en Calculadora basica con GUI

Publicado por Mr. X (2 intervenciones) el 23/07/2015 23:36:47
Hola a todos,

Soy nuevo en Java y en este foro, espero me puedan ayudar con el siguiente problema:

Estoy tratando de crear una calculadora con las funciones básicas (suma,resta,multiplicación y división), ya tengo la parte grafica de la calculadora y estoy comenzando a programar lo que hara cuando se le de click en el boton "suma" luego de ingresar los numeros en unos textfields que he creado, y a la hora de hacer click en "suma" (que es cuando debe ejecutar la accion de sumar los numeros ingresados y mostrarlos en otro textfield vacio) me tira una serie de errores.
Les dejo el codigo y una captura de los errores.
Aprecio mucho su ayuda y de ante mano gracias.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package Tareas;
 
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.lang.Integer.*;
import java.lang.*;
 
public class calc1 extends JFrame implements ActionListener {
    JButton btn1 = new JButton("Suma");
    JButton btn2 = new JButton("Resta");
    JButton btn3 = new JButton("Multiplicacion");
    JButton btn4 = new JButton("Division");
 
            JTextField txtPagina = new JTextField("#", 3);
            JTextField txtPagina2 = new JTextField("#", 3);
            JTextField txtPagina3 = new JTextField("#", 3);
 
        public calc1(){
            super("Calculadora");
            setSize(250,180);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
            btn1.addActionListener(this);
            btn2.addActionListener(this);
            btn3.addActionListener(this);
            btn4.addActionListener(this);
 
            JLabel lblPagina = new JLabel("Escriba el primer numero: ", JLabel.LEFT);
            JTextField txtPagina = new JTextField(3);
            JLabel lblPagina2 = new JLabel("Escriba el segundo numero: ", JLabel.RIGHT);
            JTextField txtPagina2 = new JTextField(3);
            JLabel lblPagina3 = new JLabel("Resultado: ", JLabel.RIGHT);
            JTextField txtPagina3 = new JTextField(3);
 
            ButtonGroup bgop = new ButtonGroup();
 
            bgop.add(btn1);
            bgop.add(btn2);
            bgop.add(btn3);
            bgop.add(btn4);
 
 
            FlowLayout dis = new FlowLayout();
            setLayout(dis);
 
 
            add(lblPagina);
            add(txtPagina);
            add(lblPagina2);
            add(txtPagina2);
            add(btn1);
            add(btn2);
            add(btn3);
            add(btn4);
            add(lblPagina3);
            add(txtPagina3);
            //pack();
 
            setVisible(true);
 
        }
 
        public static void main(String[] args) {
          calc1 app = new calc1();
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
       Object click = e.getSource();
       if (click == btn1){
           setTitle("Suma");
           String cad1= new String(txtPagina.getText());
           String cad2= new String(txtPagina2.getText());
           int x1=Integer.parseInt(cad1);
           int x2=Integer.parseInt(cad2);
 
           int resu=x1+x2;
 
           String resultado=String.valueOf(resu);
           txtPagina3.setText(resultado);
       }
        if (click == btn2){
           setTitle("Resta");
       }
         if (click == btn3){
           setTitle("Multiplicacion");
       }
          if (click == btn4){
           setTitle("Division");
       }
    }
 
}


cd7d41c0c9
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas en Calculadora basica con GUI

Publicado por foreño (1 intervención) el 24/07/2015 01:00:06
Hola.
Obtener datos de un JTextField.
1
2
String valor1 = miTextFied1.getText();
String valor2 = miTextField2.getText();


No hay que hacer esto :
1
2
3
String cad1 = new String(textPagina1.getText());
Hay que ocupar el String así:
String cad1 = textPagina1.getText();

Porque:
Cuando se utiliza un literal de cadena, la cadena puede ser internados pero cuando se utiliza new String("...") de obtener un nuevo objeto String.


En este ejemplo, tanto literales de cadena se refieren al mismo objeto:


1
2
3
String a = "abc";
String b = "abc";
System.out.println(a == b);  // True

Aquí dos diferentes objetos se crean y tienen diferentes referencias:

En general, usted debe utilizar el literal de cadena. cuando sea posible. Es más fácil de leer y se da el compilador una oportunidad para optimizar su código.
Un literal de Cadena es un lenguaje de java concepto. Este es un literal de Cadena:
"un String literal"
Un objeto String es una instancia individual de la java.lang.String de la clase.
1
2
3
String s1 = "abcde";
String s2 = new String("abcde");
String s3 = "abcde";

son todas válidas, pero tienen una ligera diferencia: s1 se refieren a un internado objeto String. Esto significa, que la secuencia de caracteres "abcde" será almacenada en un lugar central y siempre que el mismo literal "abcde" se utiliza de nuevo, la JVM no va a crear un nuevo objeto String, pero el uso de la referencia del 'caché' de la Cadena

s2 es garantía de ser un nuevo objeto String, por lo que en este caso tenemos:

1
2
3
(s1 == s2) is false
(s1 == s3) is true
(s1.equals(s2)) is true


Ahora para trabajar con el String y transformalo a entero.

1
2
3
4
5
6
7
8
9
10
11
12
botonAccion.addActionListener( new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
     String valor1 = miTextField1.getText();
     String valor2 = miTextField2.getText();
     int numero1 = Integer.valueOf(valor1);
     int numero2 = Integer.valueOf(valor2);
     int op = (numero1 + numero2);
     String valorTotal = String.valueOf(op);
     textPagina.setText(valorTotal);
 }
});

Con esto ya no deberías tener ningún problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mr. X

Problemas en Calculadora basica con GUI

Publicado por Mr. X (2 intervenciones) el 24/07/2015 01:34:48
foreño,

Muchisimas gracias por tu respuesta, me aclaraste muchisimas dudas, pero lastimosamente el problema persiste, los numerosos errores que se muestran en la captura que postee siguen apareciendo al momento de querer realizar la accion de sumar.
Y me surgió otra duda con esta linea de código que agregaste:

botonAccion.addActionListener( new ActionListener() {
...
}
});
Trate de implementarla pero tira otros errores. Si serias tan amable de explicar para que sirve te lo agradecería mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas en Calculadora basica con GUI

Publicado por foreño (1 intervención) el 24/07/2015 04:17:39
Hola
Para colocar un evento a un JButton emn forma manual no gráfica con netbeans[/b]:
1
2
3
4
5
botonAccion.addActionListener( new ActionListener() {
//Aquí todo la acción a realizar
....................................................
}
});

Ahora veo que estas llamando el ActionListener así:

1
btn1.addActionListener(this);

y el método de acción así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Override
 public void actionPerformed(ActionEvent evento) {
            //Para saber que boton esta siendo pulsado
          // Se utliliza el método getSource() de la clase Object.
           if(evento.getSource() == btn1) {
                         String valor1 = miTextField1.getText();
                         String valor2 = miTextField2.getText();
                         int numero1 = Integer.valueOf(valor1);
                         int numero2 = Integer.valueOf(valor2);
                         int op = (numero1 + numero2);
                         String valorTotal = String.valueOf(op);
                         textPagina.setText(valorTotal);
               }
             if(evento.getSource() == btn2 ) {
                 //Colocar aquí lo que hace el boton2
            }
          //Y así sucesivamente con los demás botones.
           if() {
           }
        });

[b]Intentalo, borra todo lo que tienes en el actionPerformed y haz una prueba del botón 1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar