2012-05-23 56 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