Ver Mensaje Individual
  #8 (permalink)  
Antiguo 12/11/2011, 09:10
vanraidex
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 6 meses
Puntos: 1
Pregunta Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Cita:
Iniciado por alexg88 Ver Mensaje
char c = ((JButton) e.getSource()).getText().charAt(0);

if (c >= '0' && c <= '9') {
textfield1.setText(textfield1.getText() + c);
}

Buenas,

Sobre tu primera duda, es muy sencillo lo que hace.

Paso por paso:
  1. (Button)e.getSource() -> Obtiene el componente que originó el evento (tiene que realizar un casting porque getSource() devuelve un objeto de la clase Object).
  2. .getText() -> obtiene la etiqueta del botón (si el botón tiene el texto "1" devuelve "1").
  3. .charAt(0) -> obtiene el primer caracter de la cadena obtenido antes como tipo char. Lo hace para posteriormente mirar si es un caracter entre el '0' y el '9'
  4. Verifica que se trate de un caracter entre el '0' y el '9' y en caso de que sea así significa que se ha pulsado un número y hay que añadirlo.
  5. textfield1.setText(textfield1.getText() + c) -> con textfield1.getText() obtiene la cadena de texto que está escrita en el campo de texto y lo añade al caracter c que has obtenido antes. Después utiliza .setText para poner como texto del campo el obtenido por la concatenación de lo que había antes escrito con el caracter obtenido (que es el del botón presionado).

Para mostrar una ventana con texto puedes usar JOptionPane.showMessageDialog (míralo en el API de Java).

Para cerrar la aplicación utiliza System.exit(0).

[EDITO] Te sugiero también que utilices los LayoutManager de Java y no hacerlo de manera absoluta. Para una calculadora el GridLayout es perfecto.

Te pongo un enlace con explicaciones:[url]http://chuwiki.chuidiang.org/index.php?title=Uso_de_Layouts#BoxLayout[/url]

También deberías usar arrays para guardar los JButton de los números, además de que saldría de manera muy natural.

Hola, lo primero te agradezco toda la ayuda y el tiempo dedicado. Ahora ya comienzo con las dudas...jeje

La duda del código ya está resuelta.

He estado trabajando en lo que me has dicho e investigando un poco por ahí y he encontrado un código que funciona a la perfección. El problema es que casi que no lo entiendo en algunas partes. Este es el código:

Código Java:
Ver original
  1. String labelButtons[] = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"};
  2.         JPanel cp = (JPanel) this.getContentPane();
  3.         cp.setLayout(new BorderLayout());
  4.         JPanel p = new JPanel();
  5.         p.setLayout(new GridLayout(0, 4));
  6.         for (int i = 0; i < labelButtons.length; ++i) {
  7.             JButton boton = new JButton(labelButtons[i]);
  8.             boton.addActionListener(this);
  9.             p.add(boton);
  10.         }
  11.         cp.add(textfield1, BorderLayout.NORTH);
  12.         cp.add(borrar, BorderLayout.AFTER_LAST_LINE);
  13.         cp.add(p, BorderLayout.CENTER);
  14.         this.setSize(300, 300);
  15.         this.setLocationRelativeTo(null);
  16.         this.setVisible(true);

Entiendo que crea un vector con todos los datos de texto de los botones, pero lo que no entiendo es por qué crea dos JPanel... y qué hace esto: JPanel cp = (JPanel) this.getContentPane();

Luego otra duda que me surge al utilizar el BorderLayout es que no puedo ampliar el tamaño del textfield, esto lo establece en el mínimo para ser visto y me parece bien, pero me gustaría poder ampliarlo un poco sin perder la estructura de todo.

Respecto a lo del anterior post. Cuando pongo System.exit(0) me da error. No se sale del programa. Yo creo que tengo algo mal configurado a la hora de interpretar los clicks en el menú.

Lo mismo me pasa con Acerca de..., he puesto lo que me has dicho y también me salta error. He probado con otras alternativas y lo mismo. Por eso pienso que algo del menú lo tengo mal escrito o configurado.

Un saludo y de nuevo, mil gracias.

EDITO:

He estado probando cosas y me he dado cuenta de que si le meto la accion del menú dentro del constructor si funciona sin problemas, es decir he creado una clase interna dentro del addActionListener del botón acerca y ahí he llamado al actionPerformed y he puesto lo que tiene que hacer y funciona perfecto. Con el menú Salir he hecho lo mismo y perfecto.¿Por qué antes no funcionaba y si lo meto dentro del constructor si funciona?

Os dejo el código, todo está escrito dentro del constructor:

Código java:
Ver original
  1. acerca = new JMenuItem( "Acerca de..." );
  2.           menu.add( acerca );
  3.           acerca.addActionListener(
  4.      
  5.              new ActionListener() {
  6.      
  7.                
  8.                 public void actionPerformed( ActionEvent evento ){
  9.                    
  10.                     JOptionPane.showMessageDialog( Formulario.this,
  11.                       "Calculadora creada por Daniel Ruiz Sánchez",
  12.                       "Acerca de", JOptionPane.PLAIN_MESSAGE );
  13.                    
  14.                 }
  15.      
  16.              }  
  17.      
  18.           );
  19.          
  20.          
  21.           salir = new JMenuItem( "Salir" );
  22.           menu.add( salir );
  23.           salir.addActionListener(
  24.      
  25.              new ActionListener() {
  26.      
  27.                
  28.                 public void actionPerformed( ActionEvent evento ){
  29.                    
  30.                     System.exit( 0 );
  31.                 }
  32.      
  33.              }
  34.      
  35.           );

El resto de cosas no he conseguido solucionarlas ni entenderlas.

Última edición por vanraidex; 13/11/2011 a las 05:00