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

problema con ventanas (swing)

Estas en el tema de problema con ventanas (swing) en el foro de Java en Foros del Web. hola muchach@s, estoy haciendo un programa grande, con muchas ventanas y tengo un problema. Digamos que tengo una ventana que abre otra. tengo dos opciones ...
  #1 (permalink)  
Antiguo 06/05/2006, 14:48
Avatar de Jose2k  
Fecha de Ingreso: junio-2003
Mensajes: 98
Antigüedad: 20 años, 10 meses
Puntos: 0
problema con ventanas (swing)

hola muchach@s, estoy haciendo un programa grande, con muchas ventanas y tengo un problema. Digamos que tengo una ventana que abre otra. tengo dos opciones para terminar de trabajar con la segunda, presionando la X o un boton que modifica algo de la primera ventana. al cerrar la ventana con X, usando dispose(); no tengo problema alguno, sin embargo, al usar el boton y usando dispose(); se cierra la ventana, pero esta deja "huellas" en la primera ventana, es decir, el color se va con respecto a las dimensiones de la segunda ventana, busque en google pero sin embargo no salio nada... a ver si consigo algo aqui!

gracias!
  #2 (permalink)  
Antiguo 06/05/2006, 14:58
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Sin ver el código es dificil saber qué está pasando. De todas formas ten en cuenta que el código que se ejecuta cuando pulsas un botón (en el método actionPerformed()), se ejectua en el mismo hilo de java que se encarga del repintado de las ventanas.

Si en un método actionPerformed() no terminas lo antes posible, verás efectos de repintado como los que mencionas. La ventana debería repintarse correctamente en cuanto termines tu actionPerformed().

De todas formas ya te digo, es una posibilidad, pero habría que ver algo de código para saber qué está pasando.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 06/05/2006, 15:17
Avatar de Jose2k  
Fecha de Ingreso: junio-2003
Mensajes: 98
Antigüedad: 20 años, 10 meses
Puntos: 0
el codigo es largo, pero te pongo el actionperformed de la segunda ventana (recuerda que los desperfectos de pintura le pasan a la primera ventana)
Código:
salvar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String arr[]=new String[modelo.getColumnCount()];
                int i=0, j=0;
                if (mod2.getRowCount()<=10) {
                    j=mod2.getRowCount();
                }else {
                    j=11;
                }
                if (j<11) {
                    try {
                        while (i < modelo.getColumnCount()) {
                            arr[i] = modelo.getValueAt(tabla.getSelectedRow(),i).toString();
                            i++;
                        }
                        mod2.insertRow(j,arr);
                    } catch (Exception ex) {
                        JOptionPane.showMessageDialog(null,
                                "Error, Seleccione un producto a agregar\n" + ex, "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }else {
                    mod2.removeRow(0);
                    JOptionPane.showMessageDialog(null, "Error, solo puede agregar 10 productos","Error",JOptionPane.ERROR_MESSAGE);
                }
#aqui es cuando deberia cerrar
                repaint();
                dispose(); 
            }});
mod2 es un modelo de Jtable que esta en la primera ventana. lo paso por parametro...
si quieres todo el codigo lo pongo, pero creo que no haria falta... gracias por responder.
  #4 (permalink)  
Antiguo 06/05/2006, 20:06
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Por aquí no veo problema. ¿Tienes muchos elementos en esos modelos?. ¿El efecto es temporal y se acaba arreglando o queda definitivamente mal pintado?

En la primera ventana, ¿dibujas algo tú con el graphics o pones algún fondo?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 07/05/2006, 06:38
Avatar de Jose2k  
Fecha de Ingreso: junio-2003
Mensajes: 98
Antigüedad: 20 años, 10 meses
Puntos: 0
hola, gracias por tus respuestas, fijate, no tengo muchos objetos en esos modelos, y problema se arregla por ejemplo (hay un textfield en la ventana) si le hago click en el, se "pinta" el textfield. de lo demas no. ah, y al panel le pongo un fondo de color naranja, si le hago un printscr veras mejor como es el problema.. mira:

http://img211.imageshack.us/img211/3355/peo6ld.jpg
  #6 (permalink)  
Antiguo 07/05/2006, 14:24
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

No debería pasar eso y seguramente hay algo raro en el código. De todas formas, como solución rápida (y chapuza), prueba a llamar después de cerrar la ventana secundaría a repaint() de la ventana primaria.
Si no funciona, llama a updateUI() de la ventana primaria.

Si no funciona, o si funciona pera quieres arreglarlo en serio, vuelve a escribir, pero indica si en la ventana primaria redefines alguno de los métodos de pintado (update(), paint(), repaint(), etc).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 08/05/2006, 05:34
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
tuvimos un problema parecido con una interfaz MDI, la ventana que estaba delante de otra no se mostrba bien, se veian componentes de la que estaba detras. al pasar el mouse se iban repintando.
La ventana que tenia el foco, no era la que estaba activa, y a veces sus componentes ni siquiera se dibujaban...

Sugerencias?
  #8 (permalink)  
Antiguo 08/05/2006, 15:52
Avatar de Jose2k  
Fecha de Ingreso: junio-2003
Mensajes: 98
Antigüedad: 20 años, 10 meses
Puntos: 0
pues intente varias respuestas que me dieron en otros foros y nada, sigue en las mismas, me fui con el setVisible(false)... pero esto no destruye el objeto como tal, cierto? osea, si abro varias veces esa ventana estaria instanciando varios objetos y no estaria cerrandolos... cierto?
  #9 (permalink)  
Antiguo 08/05/2006, 22:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Efectivamente, setVisible(false) no lo destruye, sólo lo oculta. Pero te bastaría con poner setVisible(true) para volver a visualizarla y no tendrías que hacer un nuevo new de la ventana secundaria. De esta forma no crear cada vez una ventana nueva.

De hecho, es lo que suelo hacer yo. No me fio un pelo del dispose() para destruir ventanas, así que prefiero dejarlas construidas y simplemente hacer setVisible(true) o setVisible(false).

Si el código no es muy grande y no usa cosas raras (bases de datos, librerías externas complejas, etc) pásamelo y le hecho un ojo a ver si veo algo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
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 05:02.