Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Como usar un metodo para 2 clases en donde necesito calcular lo mismo

Estas en el tema de Como usar un metodo para 2 clases en donde necesito calcular lo mismo en el foro de Java en Foros del Web. Hola gente, se preguntaran el porque un metodo para 2 clases en donde calculo lo mismo? Resulta que tengo todo mi codigo para calcular la ...
  #1 (permalink)  
Antiguo 01/08/2013, 10:49
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 10 años, 9 meses
Puntos: 1
Exclamación Como usar un metodo para 2 clases en donde necesito calcular lo mismo

Hola gente, se preguntaran el porque un metodo para 2 clases en donde calculo lo mismo?

Resulta que tengo todo mi codigo para calcular la edad a partir de una frecha seleccionada en un JCalendarCombo, ningun problema por esa parte; pero resulta que necesito calcular la edad tanto para clientes, como para empleados.

Resulta que tengo 2 clases, "Empleado", "Cliente" cada uno con su respectivo JCalendarCombo, bueno resulta que en el JCalendarCombo le hice un split para pasar los meses "String" a meses "int", la pregunta es como usar el mismo split para los 2 JCalendarCombo sin tener que hacerlo separadamente para cada uno?

Otra cosa, despues de hacer ese split esas variables las uso para compararlas con la fecha actual y posteriormete mandar el resultado "Edad" en una variable. para asi guardarla a un DB.

Mi metodo es el siguiente:

Código Java:
Ver original
  1. package ObtenerEdad;
  2.  
  3. import Modelos.Fecha;
  4. import Modelos.MCliente;
  5. import Modelos.MHistorial;
  6.  
  7. import formularios.Historial;
  8. import formularios.Cliente;
  9.  
  10.  
  11. public class ObtenerFecha {
  12.  
  13.     MHistorial MH = new MHistorial();
  14.     MCliente MC = new MCliente();
  15.     Historial Historial;
  16.     Cliente Cliente;
  17.    
  18.    
  19.    
  20.     public ObtenerFecha(Cliente Cliente){
  21.     this.Cliente = Cliente;
  22.        
  23. }
  24.    
  25.     public int CalcularEdad() {
  26.        
  27.         Fecha f = new Fecha();
  28.        
  29.         Calendar = MC.setCalendar(Cliente.getSelected()); //JCalendarCombo del cliente
  30.         String Fecha = String.valueOf(Calendar);
  31.         //Fecha Registrada
  32.  
  33. //Arriba pase el calendario a la variable fecha para asi despues hacerle el split, la pregunta es: a los 2 JCAlendarCombo les pudo hacer el split y guardarlos en variables diferentes, pero el problema es que me tocaria hacer todo esa particion de los meses y luego calcular la fecha etc..
  34.  
  35.         String Arreglo[] = new String[5];
  36.         Arreglo = Fecha.split(" ");
  37.  
  38.         String Dia = Arreglo[0];
  39.         int NumDia = Integer.parseInt(Arreglo[1]);
  40.         String De = Arreglo[2];
  41.         String Mes = Arreglo[3];
  42.         String De2 = Arreglo[4];
  43.         int Año = Integer.parseInt(Arreglo[5]);
  44.  
  45.         int Mese = 0;
  46.  
  47.         switch (Mes) {
  48.             case "enero":
  49.                 Mese = 1;
  50.                 break;
  51.             case "febrero":
  52.                 Mese = 2;
  53.                 break;
  54.             case "marzo":
  55.                 Mese = 3;
  56.                 break;
  57.             case "abril":
  58.                 Mese = 4;
  59.                 break;
  60.             case "mayo":
  61.                 Mese = 5;
  62.                 break;
  63.             case "junio":
  64.                 Mese = 6;
  65.                 break;
  66.             case "julio":
  67.                 Mese = 7;
  68.                 break;
  69.         }
  70.  
  71.  
  72.  
  73.         //fecha Actual
  74.         String Arreglo2[] = new String[2];
  75.         Arreglo2 = f.getFecha().split("/");
  76.  
  77.         int Dia1 = Integer.parseInt(Arreglo2[0]);
  78.         int Mes1 = Integer.parseInt(Arreglo2[1]);
  79.         int Año1 = Integer.parseInt(Arreglo2[2]);
  80.  
  81.         // Cálculo de las diferencias.
  82.         int años = Año1 - Año;
  83.         int meses = Mes1 - Mese;
  84.         int dias = Dia1 - NumDia;
  85.  
  86.         // Hay que comprobar si el día de su cumpleaños es posterior
  87.         // a la fecha actual, para restar 1 a la diferencia de años,
  88.         // pues aún no ha sido su cumpleaños.
  89.  
  90.         if (meses < 0 // Aún no es el mes de su cumpleaños
  91.                 || (meses == 0 && dias < 0)) { // o es el mes pero no ha llegado el día.
  92.  
  93.             años --;
  94.            
  95.         }
  96.         return años;
  97.     }
  98. }

Como podran ver aqui calculo la edad para el cliente. como hago para decirle que si es para cliente haga lo mismo y para empleado lo mismo "El metodo de calcular la edad", una cosa que me pone a pensar es: el split se lo tengo que hacer obligado para cada JCalendarCombo. pero si quiero calcular la edad independiente me toca hacer el codigo 2 veces pero diferentes variables .
  #2 (permalink)  
Antiguo 01/08/2013, 11:07
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 11 años
Puntos: 9
Respuesta: Como usar un metodo para 2 clases en donde necesito calcular lo mismo

Al método calcular edad le pasas el calendario como atributo, y te olvidas de

Código Java:
Ver original
  1. Calendar = MC.setCalendar(Cliente.getSelected());
  2. //JCalendarCombo del cliente
  3. String Fecha = String.valueOf(Calendar);

y seguís como si nada...
  #3 (permalink)  
Antiguo 01/08/2013, 11:21
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Como usar un metodo para 2 clases en donde necesito calcular lo mismo

pero eh ahi la pregunta, si le paso como atributo el calendario, estaria hablando de un calendario no de los 2, como paso los 2 calendarios como atributos, sabiendo que cada calendario tiene una fecha diferente seleccionada, la verdad ando confundido xD, pues se supone que tengo los jcalendar instanciados en otras clases por separado.

Última edición por drakk92; 01/08/2013 a las 11:27
  #4 (permalink)  
Antiguo 01/08/2013, 11:38
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 11 años
Puntos: 9
Respuesta: Como usar un metodo para 2 clases en donde necesito calcular lo mismo

¿y si llamas 2 veces al metodo ?
Código Java:
Ver original
  1. int a = obtenerFecha.CalcularFecha(calendar1);
  2. int b = obtenerFecha.CalcularFecha(calendar2);
  #5 (permalink)  
Antiguo 01/08/2013, 12:33
Avatar de drakk92  
Fecha de Ingreso: julio-2013
Ubicación: cali
Mensajes: 25
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Como usar un metodo para 2 clases en donde necesito calcular lo mismo

Intente enviarle el calendario como parametro pero me tira error...

Aqui la clase secundaria

Código Java:
Ver original
  1. package ObtenerEdad;
  2.  
  3. import Modelos.Fecha;
  4. import org.freixas.jcalendar.JCalendarCombo;
  5.  
  6.  
  7. public class ObtenerFecha {
  8.  
  9.     Object JCalendarCombo;
  10.    
  11.        
  12.     public int CalcularEdad(JCalendarCombo jCalendarCombo3) {
  13.        
  14.         Fecha f = new Fecha();
  15.        
  16.        JCalendarCombo = jCalendarCombo3;
  17.         String Fecha = String.valueOf(JCalendarCombo);
  18.        
  19.         //Fecha Registrada
  20.         String Arreglo[] = new String[5];
  21.         Arreglo = Fecha.split(" ");
  22.  
  23.         String Dia = Arreglo[0];
  24.         int NumDia = Integer.parseInt(Arreglo[1]);
  25.         String De = Arreglo[2];
  26.         String Mes = Arreglo[3];
  27.         String De2 = Arreglo[4];
  28.         int Año = Integer.parseInt(Arreglo[5]);
  29.  
  30.         int Mese = 0;
  31.  
  32.         switch (Mes) {
  33.             case "enero":
  34.                 Mese = 1;
  35.                 break;
  36.             case "febrero":
  37.                 Mese = 2;
  38.                 break;
  39.             case "marzo":
  40.                 Mese = 3;
  41.                 break;
  42.             case "abril":
  43.                 Mese = 4;
  44.                 break;
  45.             case "mayo":
  46.                 Mese = 5;
  47.                 break;
  48.             case "junio":
  49.                 Mese = 6;
  50.                 break;
  51.             case "julio":
  52.                 Mese = 7;
  53.                 break;
  54.         }
  55.  
  56.  
  57.  
  58.         //fecha Actual
  59.         String Arreglo2[] = new String[2];
  60.         Arreglo2 = f.getFecha().split("/");
  61.  
  62.         int Dia1 = Integer.parseInt(Arreglo2[0]);
  63.         int Mes1 = Integer.parseInt(Arreglo2[1]);
  64.         int Año1 = Integer.parseInt(Arreglo2[2]);
  65.  
  66.         // Cálculo de las diferencias.
  67.         int años = Año1 - Año;
  68.         int meses = Mes1 - Mese;
  69.         int dias = Dia1 - NumDia;
  70.  
  71.         // Hay que comprobar si el día de su cumpleaños es posterior
  72.         // a la fecha actual, para restar 1 a la diferencia de años,
  73.         // pues aún no ha sido su cumpleaños.
  74.  
  75.         if (meses < 0 // Aún no es el mes de su cumpleaños
  76.                 || (meses == 0 && dias < 0)) { // o es el mes pero no ha llegado el día.
  77.  
  78.             años --;
  79.            
  80.         }
  81.         return años;
  82.     }
  83.  
  84.    
  85. }


Aqui el Jframe

Código Java:
Ver original
  1. public Object edad() {
  2.         ObtenerFecha ob = new ObtenerFecha(this);
  3.         Object e = ob.CalcularEdad(jCalendarCombo3);
  4.         return e;
  5.     }

y mas abajo en el jframe el boton para probar la impresion de la edad

Código Java:
Ver original
  1. private void ProbarActionPerformed(java.awt.event.ActionEvent evt) {                                      
  2.        JOptionPane.showMessageDialog(null, edad());
  3.     }

la verdad no se como decirle al JCalendar que recibe que lo pase a string, como lo plantee deberia de funcionar bien.

este es el error, se supone que el calendario me da como resultado.

Código Java:
Ver original
  1. Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "2001,selectedDate=miércoles"
  2.     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  3.     at java.lang.Integer.parseInt(Integer.java:492)
  4.     at java.lang.Integer.parseInt(Integer.java:527)
  5.     at ObtenerEdad.ObtenerFecha.CalcularEdad(ObtenerFecha.java:46)
  6.     at formularios.Cliente.edad(Cliente.java:132)
  7.     at formularios.Cliente.SalirActionPerformed(Cliente.java:512)
  8.     at formularios.Cliente.access$1200(Cliente.java:14)
  9.     at formularios.Cliente$13.actionPerformed(Cliente.java:316)
  10.     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
  11.     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
  12.     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
  13.     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
  14.     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
  15.     at java.awt.Component.processMouseEvent(Component.java:6505)
  16.     at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
  17.     at java.awt.Component.processEvent(Component.java:6270)
  18.     at java.awt.Container.processEvent(Container.java:2229)
  19.     at java.awt.Component.dispatchEventImpl(Component.java:4861)
  20.     at java.awt.Container.dispatchEventImpl(Container.java:2287)
  21.     at java.awt.Component.dispatchEvent(Component.java:4687)
  22.     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
  23.     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
  24.     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
  25.     at java.awt.Container.dispatchEventImpl(Container.java:2273)
  26.     at java.awt.Window.dispatchEventImpl(Window.java:2719)
  27.     at java.awt.Component.dispatchEvent(Component.java:4687)
  28.     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
  29.     at java.awt.EventQueue.access$200(EventQueue.java:103)
  30.     at java.awt.EventQueue$3.run(EventQueue.java:694)
  31.     at java.awt.EventQueue$3.run(EventQueue.java:692)
  32.     at java.security.AccessController.doPrivileged(Native Method)
  33.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
  34.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
  35.     at java.awt.EventQueue$4.run(EventQueue.java:708)
  36.     at java.awt.EventQueue$4.run(EventQueue.java:706)
  37.     at java.security.AccessController.doPrivileged(Native Method)
  38.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
  39.     at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
  40.     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
  41.     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
  42.     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
  43.     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
  44.     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
  45.     at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


se supone que el JCalendarCombo me da como resultado, jueves 1 de agosto del 2013, y como tengo arriba planteado el split esta bien :s.



Ya lo solucione, resulto ser mas sencillo de lo que pensaba, simplemente tenia que enviar como argumento un objeto x que era equivalente a una seleccion x en el jcalendarcombo, porque si le mando el calendario en si como argumento me manda un string como de 400 caracteres diciendo, item selected etc..

Última edición por drakk92; 01/08/2013 a las 18:24

Etiquetas: calcular, clase, clases, metodo, string, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:51.