Java, подождите, пока компонент будет окрашен

Я пытаюсь создать программу на Java, которая отображала бы набор изображений одно за другим, регулируя размер кадра для каждого из них. Я расширяю JPanel для отображения такого изображения:

public class ImagePanel extends JPanel{

String filename;
Image image;
boolean loaded = false;

ImagePanel(){}

ImagePanel(String filename){
    loadImage(filename);
}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    if(image != null && loaded){
        g.drawImage(image, 0, 0, this);
    }else{
        g.drawString("Image read error", 10, getHeight() - 10);
    }
}

public void loadImage(String filename){
    loaded = false;         
    ImageIcon icon = new ImageIcon(filename);
    image = icon.getImage();
    int w = image.getWidth(this);
    int h = image.getHeight(this);
    if(w != -1 && w != 0 && h != -1 && h != 0){
        setPreferredSize(new Dimension(w, h));
        loaded = true;
    }else{
        setPreferredSize(new Dimension(300, 300));
    }
}

}

Затем в потоке событий я выполняю основную работу:

        SwingUtilities.invokeLater(new Runnable(){

        @Override
        public void run(){
            createGUI();
        }
    });

В createGUI () я просматриваю набор изображений:

        ImagePanel imgPan = new ImagePanel();
    add(imgPan);

    for(File file : files){
        if(file.isFile()){
            System.out.println(file.getAbsolutePath());

            imgPan.loadImage(file.getAbsolutePath());
            pack();

            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    }

Проблема в том, что моя программа правильно меняет размер, поэтому изображения загружаются правильно, но ничего не отображает. Если я показываю только одно изображение, оно работает и для последнего изображения. Я думаю, проблема в том, что Thread.sleep () вызывается до завершения рисования изображения.

Как мне дождаться, пока моя ImagePanel закончит рисование, и начать ждать после этого? Или есть другой способ решить проблему?

Спасибо! Леонти

5
задан Leonti 9 December 2010 в 19:21
поделиться