在applet中绘制图像

时间:2012-05-23 09:21:46

标签: java image swing paint japplet

我在applet中绘制图像有问题。我想在applet中逐个显示所有图像,但它只显示我的代码在下面给出的文件夹的最后一个图像。

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

    }

}

所以,请任何人告诉我如何逐一显示所有图像。 感谢。

2 个答案:

答案 0 :(得分:2)

  

所以,请任何人告诉我如何逐一显示所有图像。感谢。

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

  • JPanel添加到JApplet

  • Images放入Icon[]

  • 的数组中
  • Icon添加到JLabel

  • 使用GridLayoutJLabelIcons放在JPanel

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

修改

  

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

  • 您必须按Thread.sleep(int);

  • 暂停此过程
  • 您可以在Thread.sleep(int);SwingWorker内使用Runnable#Thread

  • 不要在Swing GUI中使用Thread.sleep(int);其他方法,因为要阻止事件调度线程,并且可能不会绘制任何内容或仅覆盖最后一个图像

  • Runnable#Thread会更好,更简单,但是从Runnable#Thread到Swing GUI的任何输出都必须将JLabel.setIcon(myIcon)包裹到invokeLater

答案 1 :(得分:0)

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