Comunicar JFrames

35 views
Skip to first unread message

Teli

unread,
Sep 1, 2008, 4:45:34 AM9/1/08
to JavaSOS
Buenos días, necesito ayuda. Estoy haciendo una aplicacion con SWING,
necesito hacer lo siguiente:
- Desde un frame llamo a otro frame para obtener datos de un producto
y cuando ya los tengo necesito que el primer frame pueda tener acceso
a ese producto como lo puedo hacer?
Ahora mismo desde el primer frame le paso el producto creado pero sin
datos al constructor del segundo frame que lo tiene como atributo
privado; puede ser esta la solucion?

Gracias

Javier Alfonso Bellota de Frutos

unread,
Sep 1, 2008, 12:08:23 PM9/1/08
to jav...@googlegroups.com
Y que tal crear tener una referencia de los frames, por ejemplo en el principal, e implementar un método del estilo public Producto getProductoObtenido(); que devuelva el producto obtenido, o null si todabía no lo ha obtenido. Este método lo puedes llamar ya que guardas una referencia al otro Frame.

Con lo que podría ser algo del estilo:
public void actionPerformed(){
   this.otroFrame = new FrameObtenerDatos();
   this.otroFrame.obtenLosDatos();
}

public void otroMétodo(){
   Producto p = this.otroFrame.getProductoObtenido();
   if(p!=null){
      hacerCosasConProducto(p);
   }
}

Edilson

unread,
Sep 1, 2008, 2:35:50 PM9/1/08
to jav...@googlegroups.com
Utilizo la misma técnica de Javier un get para el Objeto, pero en lugar de usar un segundo frame, uso un Jdialog modal, para garantizar que el usuario termine ese proceso.

Saludos,

--
John Arévalo
GNU/Linux User #443701
http://counter.li.org/

Teli

unread,
Sep 2, 2008, 2:33:54 AM9/2/08
to JavaSOS
Buenos días; creo que no he entendido muy bien lo que estais
haciendo.
Yo tengo un frame principal en ese creo un objeto que llamo "detalle"
y para obtener más datos necesito crear otro frame al cual le paso en
el constructor ese objeto "detalle" pero claro cuando salgo del 2º
frame al volver al primero ese detalle no ha sido modificado.
Hombre como solución temporal hago en el 2º frame las operaciones con
el detalle; pero creo que no es lo más acertado o si?


On 1 sep, 20:35, Edilson <johnarev...@gmail.com> wrote:
> El 1 de septiembre de 2008 11:08, Javier Alfonso Bellota de Frutos <
> phoneixsego...@gmail.com> escribió:

Javier Alfonso Bellota de Frutos

unread,
Sep 2, 2008, 2:51:20 AM9/2/08
to jav...@googlegroups.com
Si pudieras poner algo de código de como lo tienes por ahora quedaría más claro.

¿Es algo así lo que tienes?

Frame1:

public void obtenDatos(){
   Object detalle;
   Frame frame2 = new FrameObtenerDatos(detalle);
   frame2.show();//Se que no se debe mostrar así ;).
   hacerCosas(detalle);//Haces lo que quieras con detalle.
}

Teli

unread,
Sep 2, 2008, 3:56:00 AM9/2/08
to JavaSOS

Si eso es más o menos lo que estoy haciendo y dentro del
FrameObtenerDatos quisisera guardar nuevos datos en esa variable
"detalles" para luego poder hacer cosas desde el Frame1.
Necesitas que ponga codigo igualmente

On 2 sep, 08:51, "Javier Alfonso Bellota de Frutos"
> }- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Javier Alfonso Bellota de Frutos

unread,
Sep 2, 2008, 5:16:45 AM9/2/08
to jav...@googlegroups.com
El problema está en que si haces eso, y escribes algo del estilo detalle = new Detalle(); dentro del 2º frame, este cambio no se propaga, ya que en java todos los parámetros son por copia.
Tienes dos opciones, la que creo que usas:
Pasar el objeto detalle creado en el frame 1 al constructor del frame 2, y modificarlo con los métodos del mismo. Este no te lo recomiendo ya que puede ser confuso y tener problemas indirectos, si no te das cuenta de que se le pasa por copia, además de que no puedes usar el constructor del detalle en el 2º frame.

También puedes hacer lo que dije, que sea el frame 2 el que cree el objeto y lo obtengas con algún método de este.

public void obtenDatos(){
   Frame frame2 = new FrameObtenerDatos();

   frame2.show();//Se que no se debe mostrar así ;).
   Object detalle = frame2.getDetalleObtenido();// Aquí lo obtienes.

   hacerCosas(detalle);//Haces lo que quieras con detalle.
}

En el frame 2º, tendrás que implementar el método getDetalleObtenido(), que basicamente te devuelve el objeto detalle que creas en él al salir (y sería recomendable que devuelva null si todabía no tiene los datos, o una excepción).


Supongo que habrá más posibilidades, pero creo que estas son las más usadas.

Teli

unread,
Sep 4, 2008, 3:21:39 AM9/4/08
to JavaSOS
He intentado hacer lo que me has dicho pero la cuestión es que
despues de presentarme el frame2 nunca vuelve al punto Object detalle
= frame2.getDetalleObtenido()

On 2 sep, 11:16, "Javier Alfonso Bellota de Frutos"

Diego Sulkes

unread,
Sep 4, 2008, 9:44:43 AM9/4/08
to jav...@googlegroups.com
La única recomendación que te podría dar es que reveas la forma en que escribís los mails.
En todos los que leí pedís ayuda y das tan poca información que es difícil tener una idea de lo que te pasa. En principio fijate de poner que querés hacer, que cosas probaste, que cosas usas (incluyendo IDE) y si te tira un error el stack trace.
Fijate cuantas respuestas recibís a problemas que pareciera son bastantes simples.
Y una cosita más, no te apresures a mandar el mail. Investigá primero, no preguntes algo que la respuesta sea google, porque da un poco de bronca (por lo menos a mi)
Suerte!


--- El jue 4-sep-08, Teli <esther...@hotmail.com> escribió:


¡Buscá desde tu celular! Yahoo! oneSEARCH ahora está en Claro
http://ar.mobile.yahoo.com/onesearch

Javier Alfonso Bellota de Frutos

unread,
Sep 4, 2008, 10:23:01 AM9/4/08
to jav...@googlegroups.com
Como dice Diego, el problema tiene pinta de ser fácil, pero sin más información es difícil dar una solución que valga a la primera.

El código: "Object detalle = frame2.getDetalleObtenido();// Aquí lo obtienes." ponlo en la función que se llame al cerrar el formulario, es decir, en el hilo principal de la aplicación.

¿Has probado a poner un punto de interrupción en la instrucción y ver si realmente pasa, y que valor devuelve la función?
Te lo digo porque si es un JFrame, y usas frame1.setVisible(true); para hacerlo visible, tras mostrarlo (y mientras se muestra), continuará ejecutando el resto del método y dado que todabía no se habrán obtenido los datos te debolverá null (o lo que tenga inicialmente).

Si me das información (por ejemplo si son JFrames o JDialog, o si son modales o no) te podré ayudar más, o incluso si pegas parte del código mejor.
Reply all
Reply to author
Forward
0 new messages