У меня есть JPanel внутри рамки. Содержимое JPanel должно быть обновлено при каждом вызове paintComponent
(который вызывается repaint()
), но когда я делаю это, как показано ниже, я просто вижу белое окно. (Пожалуйста, простите за искаженные отступы, Eclipse делает все виды странных вещей с закладками.)Перекрашивание JPanel внутри рамки
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 */
}
}
На самом деле, Eclipse делает все виды классных вещей с вкладками. :-) Просто нажмите CTRL-SHIFT-F, чтобы автоматически форматировать исходный текст. Он будет создавать последовательное форматирование и отступы для вас, освобождая вас от бремени сделать это самостоятельно. – harschware
Каковы значения для x (0), y (0)? Изображение может быть вне вашей панели. Запускаете ли вы его в отладчике? Код может генерировать исключение в потоке графического интерфейса, если ваш образ не найден. – josefx