2012-05-23 54 views
2

我在applet中绘制图像时遇到问题。我想要在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); 

    } 

} 

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

+0

'String filePath =“C:\\ Users \\ yogi \\ Pictures \\ pictures”;'这对服务器上的图像无效,即使在可信任的小程序中也是如此。服务器需要按需提供文件列表,或者将文件名称定义为applet元素中的参数。 –

回答

2

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

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

  • JPanelJApplet

  • Images到的Icon[]阵列

  • IconJLabel

  • 使用GridLayout用于放置JLabelIconsJPanel

  • 不必油漆到JApplet直接使用JPanelJComponent与重写方法的paintComponent()代替paint()

EDIT

实际上我想所有的图像相互替换,因此所有图像看起来就像玩电影

  • 你必须Thread.sleep(int);

  • 暂停此过程中,你可以使用Thread.sleep(int);SwingWorkerRunnable#Thread

  • 请勿使用Thread.sleep(int);其他方式在Swing GUI中,因为要阻塞Event Dispatch Thread,并且有可能没有东西会被喷漆或只有最后一个图像太

  • Runnable#Thread会更好,最简单的,但是从Runnable#Thread任何输出到您必须包装JLabel.setIcon(myIcon)invokeLater

+0

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

+0

请参阅我的编辑 – mKorbel

+2

还可以考虑使用[* Swing Timer *](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)。 – trashgod

0

采取的时间了Swing GUI结束循环很短,你只能看到最后显示的图像。在绘制每张图像后尝试添加pause