Mam JPanel wewnątrz ramki. Zawartość JPanela powinna być aktualizowana przy każdym wywołaniu do paintComponent
(która jest wywoływana przez repaint()
), ale kiedy robię to jak poniżej, widzę tylko białe okno. (proszę wybaczyć zmasakrowane wcięcia, Eclipse wykonuje wszelkiego rodzaju dziwne rzeczy z zakładkami.)Odświeżanie JPanel wewnątrz ramki
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 */
}
}
W rzeczywistości, Eclipse robi wszystkie fajne rzeczy z zakładkami. :-) Po prostu naciśnij CTRL-SHIFT-F, aby automatycznie sformatować źródło. Zapewni to spójne formatowanie i wcięcie, uwalniając cię od ciężaru robienia tego samemu. – harschware
jakie są wartości x (0), y (0)? Obraz może znajdować się poza panelem. Czy uruchamiasz go w debugerze? Kod może wygenerować wyjątek w wątku GUI, jeśli obraz nie zostanie znaleziony. – josefx