2

我在小程序中绘制图像时遇到问题。我想在小程序中一张一张地显示所有图像,但它只显示我的代码在下面给出的文件夹的最后一张图像。

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);

    }

}

所以,请谁能告诉我如何一张一张地显示所有图像。?谢谢。

4

2 回答 2

2

所以,请谁能告诉我如何一张一张地显示所有图像。?谢谢。

  • for(int i=0;i<listOfFiles.length;i++)因为替换JApplet内容中的每个循环

  • 放到JPanel_JApplet

  • 放入Images数组Icon[]

  • 放到Icon_JLabel

  • 用于GridLayout放置JLabel_ Icons_JPanel

  • 不要JApplet直接绘制,使用JPanelJComponent使用覆盖方法paintComponent()而不是paint()

编辑

实际上我希望所有图像都相互替换,所以所有图像看起来都像是在播放电影

  • 你必须暂停这个过程Thread.sleep(int);

  • 你可以使用Thread.sleep(int);insideSwingWorkerRunnable#Thread,

  • 不要Thread.sleep(int);在 Swing GUI 中使用其他方式,因为会阻塞 Event Dispatch Thread,并且可能不会绘制任何内容或仅绘制最后一个图像

  • Runnable#Thread会更好,更简单,但是任何来自Runnable#ThreadSwing GUI 的输出都必须包装JLabel.setIcon(myIcon)invokeLater

于 2012-05-23T09:54:55.513 回答
0

结束循环所需的时间非常短,您只能看到显示的最后一张图像。尝试pause在绘制每个图像后添加一个。

于 2012-05-23T10:05:23.830 回答