He tenido una pequeña sorpresa programando interfaces gráficas con Java. He simplificado el código manteniendo el problema para que se haga más sencilla su comprensión. Tenemos una clase Prueba2 que extiende un JFrame:
Código
package prueba2; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.JFrame; private PanelPrueba Juego; Juego=new PanelPrueba(); getContentPane().add(Juego); } }); Juego.setVisible(true); } Prueba2 J=new Prueba2(); J.setBounds(0, 0, 400, 400); J.setVisible(true); } }
Y otra clase PanelPrueba, que extiende un JPanel e implementa un KeyListener:
Código
package prueba2; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JPanel; public PanelPrueba(){ setBounds(0,0,200,500); addKeyListener(this); setFocusable(true); requestFocus(); } g.fillRect(0, 0, 200, 500); } public void reiniciar() { repaint(); } @Override @Override if(showConfirmDialog(this,"Has ganado,deseas empezar otra partida?","Fin de Partida",YES_NO_OPTION,PLAIN_MESSAGE)==YES_OPTION){ reiniciar(); } else{ } } @Override }
Básicamente lo que pasa cuando aprietas una tecla es que te sale un cuadro de diálogo con dos botones. Si se pulsa "No" la aplicación finaliza y si se pulsa "Sí" vuelve a la situación inicial. La sorpresa está en que si se pulsa "Sí" aparece un molesto texto detrás del JPanel. ¿Alguien sabría explicarme por qué pasa eso, y cómo se puede solucionar el problema?
He estado probando cosas, y si el cuadro de diálogo haces que aparezca con un showMessageDialog en lugar de con un showConfirmDialog el problema desaparece.
Por otro lado, si hago que la clase PanelPrueba extienda un Canvas en lugar de un JPanel el problema desaparece. No obstante, quisiera solucionar el problema con un JPanel, ya que éste es el "peso pesado" de los contenedores, y aporta muchas ventajas, ¿verdad?
También me gustaría comentar que me han pasado cosas parecidas cuando he añadido objetos de clases JPanel y JButton a un mismo JFrame, y que estos problemas han desaparecido igualmente utilizando Canvas.
Agradezco de antemano cualquier tipo de ayuda o comentario y el tiempo que os haya tomado atenderme.
Un saludo a todos.