私は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();
}
}
}
問題は、私のプログラムが適切にサイズ変更を行うため、画像は正しく読み込まれますが、何も表示されないことです。画像を1つだけ表示すると、最後の画像でも機能します。問題は、画像の描画が完了する前に Thread.sleep() が呼び出されることだと思います。
ImagePanel がペイントを終了し、その後待機を開始するのを待つにはどうすればよいですか? または、問題を解決する別の方法はありますか?
ありがとう!レオンティ