Java - datos entre clases

   
Vista:

datos entre clases

Publicado por Rigo (4 intervenciones) el 28/02/2014 00:40:22
Hola amigos soy nuevo en java y tengo una duda. Necesito iniciar un programa con una clase "clase1" con dos atributos nombre y edad, una vez capturados (por consola) me tiene que abrir un jframe con 2 textfields donde uno tendrá el nombre y el otro la edad que se capturaron. Ahí me debe permitir modificar los dos textfields y con otro método o botón la verdad no sé, y hacer que se guarden en las variables de la clase1. GRACIAS POR SU AYUDA.

class clase1 {

Scanner datos = new Scanner(System.in);

String nombres(String nombre){
System.out.println("Escriba su nombre");
nombre = datos.next();
return nombre;
}

int edades(int edad){
System.out.println("Su edad ");
edad = datos.nextInt();
return edad;
}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jaime

datos entre clases

Publicado por Jaime (7 intervenciones) el 28/02/2014 22:52:10
Hola Rigo!
Te puedo dar una idea de como puedes solucionar eso, aunque no la tengo muy clara, porque yo he hecho algo parecido pero en C# y no conozco bien los métodos de form en Java:
-Tienes que crear una clase jform que procese el nombre y la edad.
-En el archivo de consola, tienes que invocar esa clase con su respectiva función.
Es complicado explicar por foros, pero básicamente es invocar un programa desde otro, es parecido a algo asi, aclaro que no es así sino algo parecido, esto lo hago para que te hagas a una idea, solo tienes que buscar los métodos apropiados:
class clase1 {

Scanner datos = new Scanner(System.in);

String nombres(String nombre){
System.out.println("Escriba su nombre");
nombre = datos.next();
return nombre;
}

int edades(int edad){
System.out.println("Su edad ");
edad = datos.nextInt();
return edad;
}

//Clase que Jform creada para mi uso
Procesar mod_nom_edad = new Procesar (nombre, edad);
DialogResult a=mod_nom_edad.showDialog(); // o como sea el método para invocar una nueva instancia de caja dialogo en java.

if (a.Result= ok){
nombre = mod_nom_edad.ObtenerNom();
edad = mod_nom_edad.ObtenerEdad();
}
System.out.println(nombre.toString(), edad.toString());

}

Ojalá entiendas lo que trato de decir y perdón por no conocer bien los métodos de creación de instancias en java, apenas estoy aprendiendo el mundo java... Y recuerde, tiene que ser una caja de diálogo para que la consola se pause...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

datos entre clases

Publicado por Rigo Gonzalez (4 intervenciones) el 02/03/2014 05:14:44
Gracias, me costó pero le entendí
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

datos entre clases

Publicado por alvaro (17 intervenciones) el 01/03/2014 14:54:05
te creas creas tu clase que contiene esas variables, por asi decirlo digamos clase persona:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package persona;
 
/**
 *
 * @author alvaro
 */
public class Persona {
 
    private String nombre;
    private int edad;
 
    public Persona(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }
 
    public Persona() {
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public int getEdad() {
        return edad;
    }
 
    public void setEdad(int edad) {
        this.edad = edad;
    }
 
    @Override
    public String toString() {
        return "Persona{" + "nombre=" + nombre + ", edad=" + edad + '}';
    }
 
}



AHORA TE CREAS TU VENTANA(JFRAME)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package persona;
 
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
 
/**
 *
 * @author alvaro
 */
public class Frame extends JFrame {
 
    private Container contenedor;//contenedor que contendra todos los componentes graficos
    private Persona persona;
    private JTextField fieldNombre;
    private JTextField fieldEdad;
    private JButton button;
 
    public Frame(Persona persona) {
        this.persona = persona;//referencia al objeto persona que le pasamos
        configuration();
        initComponent();
        listener();
        setVisible(true);//hacemos visible la pantalla
    }
 
    private void initComponent() {
 
        fieldNombre = new JTextField();
        fieldNombre.setPreferredSize(new Dimension(200, 50));
        fieldEdad = new JTextField();
        fieldEdad.setPreferredSize(new Dimension(200, 50));
 
        button = new JButton("Aceptar");
 
        contenedor.add(fieldNombre);
        contenedor.add(fieldEdad);
        contenedor.add(button);
    }
 
    private void configuration() {
        contenedor = getContentPane();//getContentPane() contenedor donde deben posicionarse los componentes graficos
        contenedor.setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//cierra la aplicacion al cerrar la ventana
        setSize(new Dimension(250, 200));//dimension de la ventana
        setLocationRelativeTo(null);//se posiciona en el centro de la pantalla
 
    }
 
    private void listener(){
    button.addActionListener(new ActionListener() {
 
        @Override
        public void actionPerformed(ActionEvent e) {
            persona.setNombre(fieldNombre.getText().trim());
            persona.setEdad(Integer.parseInt(fieldEdad.getText()));
            System.out.println(persona.toString());
        }
    });
    }
 
}


Y EN EL MAIN INICIAS LOS DATOS...
EJECUTAS UNA CLASE PERSONA PIDES LOS DATOS DEL INICIO Y LOS METES Y LANZAS LA VENTANA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package persona;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
/**
 *
 * @author alvaro
 */
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int edad;
        try {
            Persona persona = new Persona();
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
 
            System.out.println("Escriba el nombre");
            persona.setNombre(bf.readLine());
            System.out.println("Escriba la edad");
            edad = Integer.parseInt(bf.readLine());
            if (edad > 0) {
                persona.setEdad(edad);
            } else {
                persona.setEdad(0);// si la edad es negativa le asignamos que tiene como edad 0 años, esto puedes cambiarlo a gusto
            }
 
            System.out.println(persona.toString());
 
            Frame frame = new Frame(persona);
        } catch (IOException | NumberFormatException ex) {
            System.out.println("Error de I/O, o edad incorrecta");
        }
    }
 
}


LO QUE NO ENTIENDAS DILO QUE ESTAS A TIEMPO PARA RESOLVERTE LAS DUDAS:
RECUERDA QUE EL PRIMER CAMPO DE TEXTO DE LA VENTANA ES PARA NOMBRE Y EL DE ABAJO LA EDAD
SOLO SE GUARDAN LOS CAMBIOS CUANDO LE DES AL BOTON ACEPTAR, YA QUE NO INTRODUJE NADA DE AL HACER INTRO NI NADA POR EL ESTILO, ES UN EJEMPLO BASICO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

datos entre clases

Publicado por Rigo Gonzalez (4 intervenciones) el 02/03/2014 05:17:49
Muchas gracias Alvaro, me haz ayudado bastante, sólo tengo una duda, al capturarlos por consola me abre el Frame pero no me carga los datos que capturé en consola, después de eso al darle aceptar pues si me sustituye lo capturado en consola por lo que capturé en las cajas, y si es en las mismas variables, gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

datos entre clases

Publicado por alvaro (17 intervenciones) el 02/03/2014 09:52:49
si lo que quieres que te abra ya el frame con los datos de inicio solo tienes que hacer lo siguiente:

en la clase del jframe como ya recibe un objeto persona cuando creas los jtextfield:
fieldNombre = new Jtextfield(persona.getNombre());

fieldEdad = new Jtextfield(persona.getEdad());

y con esto ya te abre la ventana con los campos iniciales de tu persona, solo tendras que borrarlos y cambiarlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

datos entre clases

Publicado por Rigo Gonzalez (1 intervención) el 04/03/2014 17:32:57
Muchas Gracias Alvaro, me ha sido de gran ayuda, me costó trabajo la parte del frame porque estaba acostumbrado a jalar los elementos de la paleta y que se generara el código, pero nada que no se pudiera entender leyendo un poco.
Muchas muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar