Tengo un JPanel dentro de un marco. Se supone que los contenidos de JPanel se actualizan con cada llamada al paintComponent
(que se llama por repaint()
), pero cuando lo hago como se muestra a continuación, simplemente veo una ventana blanca. (Por favor, disculpe la sangría destrozado, Eclipse hace todo tipo de cosas raras con pestañas.)Repainting un JPanel dentro de un marco
private static void handleGUI()
{
JFrame frame = new JFrame("Animation");
frame.setPreferredSize(new Dimension(100, 100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Board b = new Board();
frame.getContentPane().add(b);
frame.pack();
frame.setVisible(true);
while(true)
{
System.out.println("Repainting panel");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
b.repaint();
}
}
public class Board extends JPanel
{
public Board() { t=0; }
private int t;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
++t;
/* Variables snipped */
g.setColor(Color.white);
g.drawOval(0, 0, width, height);
BufferedImage image = ImageIO.read(new File(imagePath));
g.drawImage(image, x(t), y(t));
/* There's some more image and rectangle drawing ahead */
}
}
En realidad, Eclipse hace todo tipo de cosas interesantes con pestañas. :-) Simplemente presiona CTRL-SHIFT-F para formatear tu fuente automáticamente. Producirá un formato y sangría consistentes para usted, liberándole de la carga de hacerlo usted mismo. – harschware
¿Cuáles son los valores para x (0), y (0)? La imagen podría estar fuera de su panel. ¿Lo ejecuta en un depurador? El código puede arrojar una excepción en el hilo de la GUI si no se encuentra su imagen. – josefx