2

アプレットでの画像の描画に問題があります。すべての画像をアプレットに 1 つずつ表示したいのですが、フォルダの最後の画像しか表示されません。私のコードは以下のとおりです。

public class ImageInSwingTest extends JApplet
{
    String filePath="C:\\Users\\yogi\\Pictures\\pictures"; //all .png files more than 200 files
    String files;
    File folder=new File(filePath);
    File[] listOfFiles;
    Image m;

    @Override
    public void init()
    {
        listOfFiles=folder.listFiles();
        for(int i=0;i<listOfFiles.length;i++)
        {
            if(listOfFiles[i].isFile())
            {
                files=listOfFiles[i].getName();
                if(files.endsWith(".png"))
                {
                    String filepath=listOfFiles[i].getAbsolutePath();
                    System.out.println(filepath);
                    try {
                         m = ImageIO.read(new File(filepath));
                        paint(ImageInSwingTest.this.getGraphics());

                    } catch (IOException ex) {
                        Logger.getLogger(ImageInSwingTest.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

        }
    }
    public void paint(Graphics g)
    {
        g.drawImage(m, 0, 0, this);

    }

}

では、すべての画像を 1 つずつ表示する方法を教えてください。ありがとう。

4

2 に答える 2

2

では、すべての画像を 1 つずつ表示する方法を教えてください。ありがとう。

  • の内容をfor(int i=0;i<listOfFiles.length;i++)置き換える内部の各ループのためJApplet

  • JPanelに置くJApplet

  • Imagesの配列に入れるIcon[]

  • Iconに置くJLabel

  • GridLayoutに配置するためにJLabel使用しIconsますJPanel

  • JApplet直接ペイントしないでください。代わりにJPanelまたはJComponentオーバーライドメソッドを使用してくださいpaintComponent()paint()

編集

実際には、すべての画像を相互に置き換えて、すべての画像が映画を再生しているように見せたい

  • このプロセスを一時停止する必要がありますThread.sleep(int);

  • Thread.sleep(int);内部SwingWorkerまたはRunnable#Thread、で使用できます。

  • Event Dispatch Thread をブロックするため、Swing GUI で他の方法を使用しないでくださいThread.sleep(int);。何もペイントされないか、最後のイメージだけがペイントされる可能性があります。

  • Runnable#Threadの方が優れていて簡単Runnable#Threadですが、Swing GUI への出力はすべて、ラップJLabel.setIcon(myIcon)する必要があります。invokeLater

于 2012-05-23T09:54:55.513 に答える
0

ループを終了するのにかかる時間は非常に短いため、最後に表示された画像しか見ることができません。pause各画像を描画した後に を追加してみてください。

于 2012-05-23T10:05:23.830 に答える