• Lunes 29 de Abril de 2024, 14:34

Autor Tema:  Problemas con aplicación  (Leído 1621 veces)

gjbr

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Problemas con aplicación
« en: Jueves 2 de Septiembre de 2010, 04:28 »
0
Hola a todos. Me gustaría que me ayudarán con la siguiente aplicación. La misma, que está escrita en netbeans 6.9, es ejecutada casi a la perfección. Estoy utilizando dos clases internas como manejadores de eventos (ActionListener), la primera me funciona a la perfección, no entando la segunda, me funciona parcialmente. Deseo, si así es el caso, si el usuario decide continuar con la ejecución de los cálculos, la aplicación vuelva a iniciarse. (Véase el conjunto de sentencias resaltadas en rojo).

El código es el siguiente:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;

public class Aplicacion_01 extends JFrame { //implements ActionListener {

   private JLabel alturaEtiqueta,  // etiqueta para alturaEntrada
                  pesoEtiqueta,    // etiqueta para pesoEntrada
                  IMCEtiqueta,     // etiqueta para mostrar el IMC
                  infrapeso,       // etiqueta para indicar anorexia
                  bajopeso1,       // etiqueta para indicar delgadez moderada.
                  bajopeso2,       // etiqueta para indicar delgadez aceptada.
                  normal,          // etiqueta para indicar pesona normal.
                  preobeso,        // etiqueta para indicar pesona obesita
                  obeso1,          // etiqueta para indicar pesona obesa.
                  obeso2,          // etiqueta para indicar pesona pasada.
                  obeso3,          // etiqueta para indicar pesona pasada.
                  seguir;          // etiqueta para continuar o no.
                                                 
   private JTextField alturaEntrada,  // tomar la altura del usuario
                      pesoEntrada;    // tomar el peso del usuario

   private JButton calcularBoton,  // el usuario pulsa este botón
                   Si,              // etiqueta que permite continuar.
                   No;              // etiqueta que permite salir.
   private JPanel Continuar, Boton;
   Container contenidoBoton = getContentPane();

public Aplicacion_01() {
// Procede a delimitar el marco.
   setTitle("Determinación del ìndice corporal.");
   setLayout(new FlowLayout()); // establece el esquema del marco.
   contenidoBoton.setBackground(Color.white);
   setSize(400,220);
   setLocationRelativeTo(null);

// Comienza a crear las ventanas.
   alturaEtiqueta = new JLabel("Su altura (en metros, p.e. 1.88):");
   alturaEntrada = new JTextField(5);
   pesoEtiqueta = new JLabel("   Su peso (en kilogramos, p.e. 180.5):");
   pesoEntrada = new JTextField(5);
   calcularBoton = new JButton("  Calcula el IMC  ");
   calcularBoton.setBackground(Color.BLUE);
   calcularBoton.setForeground(Color.YELLOW);
   IMCEtiqueta = new JLabel("Este es su IMC:");
   IMCEtiqueta.setForeground(Color.MAGENTA);
 
// Identifica los diversos aspectos de las caracterìsticas de una persona.
   infrapeso = new JLabel();
   infrapeso.setText("Usted se encuentra en estado anoréxico.");
   infrapeso.setForeground(Color.darkGray);

   bajopeso1 = new JLabel();
   bajopeso1.setText("Usted se encuentra en estado delgadez moderada.");
   bajopeso1.setForeground(Color.red);

   bajopeso2 = new JLabel();
   bajopeso2.setText("Usted se encuentra en estado delgadez aceptable.");
   bajopeso2.setForeground(Color.yellow);

   normal = new JLabel();
   normal.setText("Usted se encuentra bajo un peso normal.");
   normal.setForeground(Color.blue);
   preobeso = new JLabel();
   preobeso.setText("Usted se encuentra un poco gordito(a).");
   preobeso.setForeground(Color.orange);

   obeso1 = new JLabel();
   obeso1.setText("Usted se encuentra un poco obeso(a).");
   obeso1.setForeground(Color.magenta);

   obeso2 = new JLabel();
   obeso2.setText("Usted se encuentra en estado de obesidad.");
   obeso2.setForeground(Color.red);

   obeso3 = new JLabel();
   obeso3.setText("Usted se encuentra en estado de obesidad extrema.");
   obeso3.setForeground(Color.darkGray);

// Añade las diversas etiquetas.
   add(alturaEtiqueta);
   alturaEntrada.setBorder(BorderFactory.createLineBorder(Color.blue,2));
   add(alturaEntrada);

   add(pesoEtiqueta);
   pesoEntrada.setBorder(BorderFactory.createLineBorder(Color.blue,2));
   add(pesoEntrada);

   add(calcularBoton);
   add(IMCEtiqueta);
   Calculo calcular = new Calculo();
   calcularBoton.addActionListener(calcular);
} // cierre del constructor Aplicacion_01.

public static void main(String[] args) {
       JFrame.setDefaultLookAndFeelDecorated(true);
       JDialog.setDefaultLookAndFeelDecorated(true);
       Aplicacion_01 figura = new Aplicacion_01();
       JOptionPane.showMessageDialog(null, "Esta aplicación muestra el" +
               "índice corporal de una persona así n" +
               " como su estado físico actual.", "Objetivo",
               JOptionPane.INFORMATION_MESSAGE);
       figura.setVisible(true);
              figura.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  } // cierre del método main.

private class Calculo implements ActionListener { /* Clase interna para manejar
                                                   * eventos de botón. */
    public void actionPerformed(ActionEvent evento) { /* Maneja eventos de
                                                       * botón. */
       DecimalFormat digitos = new DecimalFormat("0.00");
       String alturaCadena, pesoCadena, resultado, bajopeso;
       double peso, altura;
       double imc;

// obtener valores de entrada
       alturaCadena = alturaEntrada.getText();
       pesoCadena = pesoEntrada.getText();

// convertir la entrada a números
       altura = convertirAdouble(alturaCadena);
       peso = convertirAdouble(pesoCadena);

// calcular el IMC
       imc = calcularIMC(altura, peso);

// mostrar el resultado
       resultado = "Su IMC es: " +digitos.format(imc);
       IMCEtiqueta.setText(resultado);

// Establece las diversas condiciones de la persona.
       if(imc < 16.00) {
          add(infrapeso);
          continuacion();
       }
       if(imc < 17.00 && imc >= 16.00) {
          add(bajopeso1);
          continuacion();
       }
       if(imc < 18.49 && imc >= 17.00) {
          add(bajopeso2);
          continuacion();
       }
       if(imc < 24.99 && imc >= 18.50) {
          add(normal);
          continuacion();
       }
       if(imc < 29.99 && imc >= 25.00) {
          add(preobeso);
          continuacion();
       }
       if(imc < 34.99 && imc >= 30.00) {
          add(obeso1);
          continuacion();
       }
       if(imc < 39.99 && imc >= 35.00) {
          add(obeso2);
          continuacion();
       }
       if(imc >= 40.00) {
          add(obeso3);
          continuacion();
       }
    } // cierre del método interno actionPerformed.
} // cierre de la clase interna Calculo.

private double convertirAdouble(String cad) {
    Double objetoDouble = new Double(cad);
    return objetoDouble.doubleValue();
} // cierre del método convertirAdouble.

private double calcularIMC(double altura, double peso) {
    double imc;
    imc = peso/Math.pow(altura,2);
    return imc;
   } // cierre del método calcularIMC.

void continuacion() {
   Continuar = new JPanel(new BorderLayout());
   Boton = new JPanel();
   Si = new JButton("Si");
   No = new JButton("No");
   Si.setBackground(new Color(0,255,31,150));
   Si.setForeground(new Color(255,0,0));
   No.setBackground(new Color(0,255,31,150));
   No.setForeground(new Color(255,0,0));
   seguir = new JLabel();
   seguir.setText("¿Desea seguir calculando?");
   Boton.add(Si);
   Boton.add(No);
   ControlBoton control = new ControlBoton();
   Si.addActionListener(control);
   No.addActionListener(control);
   add(seguir);
   contenidoBoton.add(Continuar);
   Continuar.add(Boton, BorderLayout.SOUTH);
  } // cierre del método continuacion.

private class ControlBoton implements ActionListener {
    public void actionPerformed(ActionEvent evento) {
         if(evento.getSource() == Si) {
            evento.getActionCommand();
           new Aplicacion_01();
        } else if (evento.getSource() == No) {
            evento.getActionCommand();
            salida();
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        }
    }// cierre del método actionPerformed.
} // cierre de la clase interna privada ControlBoton.


void salida() {
    JDialog.setDefaultLookAndFeelDecorated(true);
    JOptionPane.showMessageDialog(null, "Ha sido un placer haber " +
              "trabajado con usted. Hasta luego...", "Salida",
              JOptionPane.INFORMATION_MESSAGE);
   } // cierre del método salida.
} // cierre de la clase Aplicacion_01.

Me podrían indicar y corregir de ser posible en donde consiste mi falla.

LEs agradezco de antemano, cualquier ayuda brindada

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Problemas con aplicación
« Respuesta #1 en: Jueves 2 de Septiembre de 2010, 16:23 »
0
Hola, tú falla está en crear una nueva instancia cada ves que presionas si, es decir estás usando un método constructor, y para el caso no se debe.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com