Pasar una instancia de una clase con datos a otra clase en Java

publicado por: Anonymous

Tengo una clase con GETTERS y SETTERS de los atributos y deseo pasar la instancia de esta clase con la información que tiene almacenada, a otra clase para poder utilizar sus datos con los GETTERS.

public class Dato_usuarios

package datos;

public class Dato_usuarios {

    private int id;
    private String nombre;
    private String apellido;
    private String usuario;
    private String contrasena;

    public Dato_usuarios(int id, String nombre, String apellido, String usuario, String contrasena) {
        super();
        this.id = id;
        this.nombre = nombre;
        this.apellido = apellido;
        this.usuario = usuario;
        this.contrasena = contrasena;
    }

    public Dato_usuarios() {
        super();
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getApellido() {
        return apellido;
    }
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }
    public String getUsuario() {
        return usuario;
    }
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
    public String getContrasena() {
        return contrasena;
    }
    public void setContrasena(String contrasena) {
        this.contrasena = contrasena;
    }

}

public class Vista_usuarios extends JFrame

// Declarada globalmente
// En una parte de esta clase, guardo los datos que el usuario escribe en los JTextField con d_u.setNombre(); etc...
Dato_usuarios d_u = new Dato_usuarios();

JButton btnEditar = new JButton("Editar");
        btnEditar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                // Instancio la clase a la que quiero pasarle "Dato_usuarios" y su información almacenada
                Vista_editarusuario v_eu = new Vista_editarusuario();
                v_eu.setVisible(true);
                v_eu.setLocationRelativeTo(null);
                // Le asigno la instancia directamente
                v_eu.d_u = d_u;
            }
        });

public class Vista_editarusuario extends JFrame

// Declarada globalmente
Dato_usuarios d_u = new Dato_usuarios();

Estoy pasando la instancia incorrectamente?
Cuál es la forma correcta de hacerlo?

solución

Lograr lo que quieres es sencillo, solo debes pasar el objeto que creas de la clase d_u a la clase Vista_editarusuario. Lo cual, lo puedes hacer utilizando el constructor.

JButton btnEditar = new JButton("Editar");
    btnEditar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // Instancio la clase a la que quiero pasarle "Dato_usuarios" y su información almacenada
            Vista_editarusuario v_eu = new Vista_editarusuario(d_u); // Pasas el objeto d_u
            v_eu.setVisible(true);
            v_eu.setLocationRelativeTo(null);
            // Le asigno la instancia directamente
            // v_eu.d_u = d_u;
        }
    });

Vista_editarusuario

public class Vista_editarusuario extends JFrame {

    // Objeto que almacenara el objeto recibido en el cosntructor
    Dato_usuarios d_u;

    // Constructor
    public Vista_editarusuario(Dato_usuarios d_u) {

        // Almacena el objeto recibido en el objeto d_u;
        this.d_u = d_u;
    }

    ...

}

Algunas correcciones

  • Las palabras que componen el nombre de tus clases las estas separando con guion bajo (_), lo cual esta mal y dificulta la legibilidad de tu código. Por convención las palabras que componen el nombre de una clase deben comenzar por mayúscula.

    Vista_editarusuario ❌
    VistaEditarUsuario ✔

  • Los nombres de las variables deben dar una idea de lo que son, por lo que no es recomendable usar letras o signos. Esta sentencia v_eu.d_u = d_u; es particularmente difícil de leer. A los objetos (variables) debes darles nombres significativos, que definan lo que son.

    d_u ❌
    datosUsuario ✔

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *