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

Problema comunicando entre clases

Estas en el tema de Problema comunicando entre clases en el foro de Java en Foros del Web. Tengo un problema enviando el atributo de una clase a otra. Estoy trabajando con JFrame. Los atributos que quiero usar son private y tengo setters ...
  #1 (permalink)  
Antiguo 15/02/2015, 10:24
 
Fecha de Ingreso: febrero-2014
Mensajes: 8
Antigüedad: 10 años, 9 meses
Puntos: 0
Problema comunicando entre clases

Tengo un problema enviando el atributo de una clase a otra. Estoy trabajando con JFrame. Los atributos que quiero usar son private y tengo setters y getters.

Tengo una clase Ventana y una clase Formulario. En la clase Ventana tengo una lista con n cantidad de datos, cuando selecciono un elemento de la lista, este lo guardo en un atributo privado ciudad de la clase Ventana. Presiono el boton continuar para que aparezca la clase Formulario y quiero usar el atributo ciudad de Ventana.

Supongo que el problema es que cuando creo el objeto de Ventana,
Ventana ventana=new Ventana();,
este me inicializa todos los atributos, porque al imprimir
System.out.print(ventana.getCiudad()); ,
solo me imprime null;

actualmente lo estoy haciendo enviando el atributo ciudad como parametro a Formulario, pero preferiria hacerlo utilizando directamente el atributo de Ventana.

Se como hacer para llamar de la segunda clase el atributo de la primera clase y aqui modificarlo, pero yo lo que necesito es que al llamarlo, ya este con los datos.

Espero haberme explicado. Gracias de antemano.
  #2 (permalink)  
Antiguo 15/02/2015, 11:59
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: Problema comunicando entre clases

Buenas,

He vuelto a leer un par de veces el post y no estoy seguro de haber entendido.

Creo que en resumen, lo que quieres es pasar un objeto Ventana a otro llamado Formulario. Pero resulta que cuando intentas acceder a los datos de ventana todos los datos estás inicializado a null y no puedes utilizarlos. Es eso?

Cuando haces new Ventana estás creando una instancia nueva de la clase, con todos sus elementos inicializados. Deberías pasar a formulario una referencia a Ventana ya inicializada.
En cualquier caso, para poder saber que estás haciendo mal deberías poner el código de lo que estás intentando hacer.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 15/02/2015, 12:04
 
Fecha de Ingreso: febrero-2014
Mensajes: 8
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Problema comunicando entre clases

Gracias por la pronta respuesta, aqui un fragmento de el codigo, a ver si se entiende mejor mi problema.

Código:
public class Window extends JFrame{
private String city;

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public Window() {
    Interface();
}

public void Interface(){

    botonContinuar = new JButton("Next");
    botonContinuar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //This get the value from my list...
            setCity((String) listaCity.getSelectedValue());

            Register open=new Register();

        }
    });
    botonContinuar.setBounds(164, 203, 89, 42);
    panel.add(botonContinuar);
}

public class Register extends Window{

public Register() {
    Window window=new Window();

    System.out.println(window.getCity());
}
Al final se me imprime :null:, cuando el resultado que yo espero es la ciudad que se selecciono de la lista en la clase Window.
  #4 (permalink)  
Antiguo 15/02/2015, 12:20
 
Fecha de Ingreso: febrero-2014
Mensajes: 8
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Problema comunicando entre clases

Consigo hacerlo enviando a city dentro del constructor de Register, algo asi como

Register open=new Register(city);

Pero yo esperaria una forma de llamar directamente a la variable dentro de mi clase Register, puesto que en la siguiente ventana tengo que enviar mas datos, como 10, y pues pense que habia una forma distinta de hacerla que estar enviando todas las varibles como parametros.

Dejo unas imagenes, a ver si se entiende un poco mejor

Esta es la primera pantalla, el usuario selecciona dos ciudades, presiona el boon continuar y los datos se envian a la siguiente ventana



Esta es la segunda, los datos deben aparecer por si solos, como mencione antes los estoy enviando como parametros dentro de el constructor de Register, pero esperaba que hubiera otra forma, asi como lo preguntaba, llamando directacemente al atributo de la clase Window


Última edición por darksilk; 15/02/2015 a las 12:27
  #5 (permalink)  
Antiguo 16/02/2015, 01:29
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: Problema comunicando entre clases

Buenas,

No se puede hacer lo que quieres sin utilizar algun tipo de magia. Una clase es un tipo y puede tener multiples instancias. Por ejemplo podrias tener multiples instancias de la clase Ventana, cada una con un valor para city. Como sabria cual mostrar?

Como solucion rapida para tu problema y aunque no sea muy OO, podrias apoyarte en un objeto global estatico. Las variables que contiene serian unicas dentro de la JVM.

Código Java:
Ver original
  1. class App {
  2.      public static Window window;
  3.  
  4. ///Mas objetos que quieres tener accesibles a nivel global?
  5. }

Cuando crear la primera vez la Window (no has puesto en tu codigo cuando lo creas) haces

Código Java:
Ver original
  1. Window window = new Window();
  2. App.window = window;


Luego desde tu clase Register (o desde cualquier otra clase desde la que quieras acceder) solo tienes que hacer:

Código Java:
Ver original
  1. public class Register extends Window{
  2.  
  3. public Register() {
  4.     System.out.println(App.window.getCity());
  5. }

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

Etiquetas: clase, clases
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 14:04.