Hola.
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:
Y otra clase PanelPrueba, que extiende un JPanel e implementa un KeyListener:
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.
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 (java) [Seleccionar]
package prueba2;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JFrame;
public class Prueba2 extends JFrame {
private PanelPrueba Juego;
public Prueba2() throws IOException{
Juego=new PanelPrueba();
getContentPane().add(Juego);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Juego.setVisible(true);
}
public static void main(String[] args) throws IOException {
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 (java) [Seleccionar]
package prueba2;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import static javax.swing.JOptionPane.PLAIN_MESSAGE;
import static javax.swing.JOptionPane.YES_NO_OPTION;
import static javax.swing.JOptionPane.YES_OPTION;
import static javax.swing.JOptionPane.showConfirmDialog;
import javax.swing.JPanel;
public class PanelPrueba extends JPanel implements KeyListener {
public PanelPrueba(){
setBounds(0,0,200,500);
addKeyListener(this);
setFocusable(true);
requestFocus();
}
public void paint(Graphics g){
g.setColor(Color.WHITE);
g.fillRect(0, 0, 200, 500);
}
public void reiniciar() {
repaint();
}
@Override
public void keyTyped(KeyEvent que) {}
@Override
public void keyPressed(KeyEvent que) {
if(showConfirmDialog(this,"Has ganado,deseas empezar otra partida?","Fin de Partida",YES_NO_OPTION,PLAIN_MESSAGE)==YES_OPTION){
reiniciar();
}
else{
System.exit(0);
}
}
@Override
public void keyReleased(KeyEvent que) {}
}
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.