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

[SOLUCIONADO] Enviar JFrame como parametro

Estas en el tema de Enviar JFrame como parametro en el foro de Java en Foros del Web. Buenas Tengo el siguiente método para validar campos vacíos dinamicamente, donde se le envia como parametro el JFrame y detectara los componentes, viendo si tienen ...
  #1 (permalink)  
Antiguo 09/11/2014, 20:45
 
Fecha de Ingreso: marzo-2014
Mensajes: 5
Antigüedad: 10 años, 8 meses
Puntos: 0
Enviar JFrame como parametro

Buenas

Tengo el siguiente método para validar campos vacíos dinamicamente, donde se le envia como parametro el JFrame y detectara los componentes, viendo si tienen la instancia de JTextField y entonces vera si esta vació o no, mi problema es que no me lo reconoce JFrame,lo debugeo y ni agarra la cantidad de objetos ni reconoce ninguna instancia o sea no valida nada, pero si cambio el parametro por JPanel si me funciona, ayuda porfa D:!?

Código:
public boolean ValidarCamposVacios(JFrame form)
    {
        boolean vacio = true;        
        for(int i = 0; form.getComponents().length>i;i++)
        {
            if(form.getComponents()[i]instanceof JTextField)
            {
                if(((JTextField)form.getComponents()[i]).getText().trim().length() == 0)
                { 
                                  
                    vacio = false;
                    break;
                }           
            }
            if(form.getComponents()[i] instanceof JPasswordField)
            {                
                if(((JPasswordField)form.getComponents()[i]).getText().trim().length() == 0)
                { 
                      vacio = false;
                }
                
            }
            
            
        }
        return vacio;
    }
  #2 (permalink)  
Antiguo 10/11/2014, 01:43
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Enviar JFrame como parametro

Buenas,

No se como te podemos ayudar. Si tienes un metodo que recibe un JFrame pero lo que le pasas es un JPanel, obviamente no va a funcionar. Yo creo que lo logico en ese metodo es que reciba un JPanel.
public boolean ValidarCamposVacios(JPanel form)

Tampoco entiendo porque en el metodo diferencias entre JTextField y JPasswordField si luego haces exactamente la misma validacion. Bastaria con un:

Código Java:
Ver original
  1. if(form.getComponents()[i]instanceof JTextField || form.getComponents()[i] instanceof JPasswordField)
  2.             {
  3.                 if(((JTextField)form.getComponents()[i]).getText().trim().length() == 0)
  4.                 {
  5.                                  
  6.                     vacio = false;
  7.                     break;
  8.                 }          
  9.             }


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 10/11/2014, 01:56
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Enviar JFrame como parametro

Si es un JFrame, normalmente le añades los componentes con

frame.getContentPane().add(componente)

así que deberías buscarlos igual

frame.getContentPane().getComponents()

En cualquier caso, quizás me equivoque porque no sé exactamente lo que pretendes, pero lo más correcto sería pasarle a ese método directamente los campos que necesita (JTextField y JPasswordField), que obviamente, no tienes que buscar fuera, sino que tendrías que tener gurdados en variables

Código Java:
Ver original
  1. public class UnaClase {
  2.    JFrame frame;
  3.    JTextField textField;
  4.    JPasswordField passwordField;
  5.  
  6.    public void initComponents () {
  7.         frame = new JFrame(....);
  8.         textField = new JTextField(....);
  9.         passwordField = new JPasswordField (....);
  10.         ...
  11.         frame.getContentPane().add(textField);
  12.         frame.getContentPane().add(passwordField);
  13.         ....
  14.         // donde te haga falta harias la llamada
  15.        validarCamposVacios (textField, passwordField);
  16.    }
  17. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 10/11/2014, 09:32
 
Fecha de Ingreso: marzo-2014
Mensajes: 5
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Enviar JFrame como parametro

Gracias a Profesor_Falken y chuidiang por responder :D lo solucione con lo de poner getContentPane() y simplifique el codigo con la el || del profesor :D

perooo tengo una pequeña duda acerca de como funciona....en el if ve si tiene la instancia de un JTextField o un JPasswordField y dentro del if ve si esta vacio o no, pero en esa linea donde lo valida esta el
(JTextField)form.getContentPane()

si antes le esta diciendo que es un JTextField como tambien puede validar si el JPasswordField esta vacio si no tienen la misma instancia!?

Última edición por darmorir; 10/11/2014 a las 10:18
  #5 (permalink)  
Antiguo 10/11/2014, 14:02
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Enviar JFrame como parametro

Buenas,

Funciona gracias a que en realidad JPasswodsField hereda de JTextField. Eso quiere decir que JPasswodsField es un JTextField y por tanto comparte la mayoría de sus métodos y funcionalidades (como getText()) .

De hecho, basándonos en el hecho de ambos heredan de JTextComponent, puedes hacer una solución mucho mas simple basada en polimorfismo. http://es.wikipedia.org/wiki/Polimor...orm%C3%A1tica)

Código Java:
Ver original
  1. if(form.getComponents()[i]instanceof JTextComponent)
  2. {
  3.        if(((JTextComponent)form.getComponents()[i]).getText().trim().length() == 0)
  4.        {          
  5.             vacio = false;
  6.             break;
  7.        }          
  8. }

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: jframe, parametro
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 10:13.