2011-07-27 85 views
3

我在Java中工作使用JWindows顯示圖像的Swing ...我使不同的JLabels包含我想要顯示的圖像.. Im刪除以前添加的組件並添加新的組件在同一的JWindow。該問題如下..如何實現睡眠以顯示圖像的幻燈片

代碼工作完全沒有睡眠功能顯示。我可以顯示所有在不同的窗口或事件完成時相同的Windows。但是,當我用睡覺,什麼都沒有得到,在此期間顯示的圖像...

有什麼辦法來實現對圖像的延遲像幻燈片放映,並在延遲之前畫圖像?

  getContentPane().remove(startLabel); 
      getContentPane().add(recordLabel1, "Center"); 
      setVisible(true); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel1); 
       getContentPane().add(recordLabel2, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel2); 
       getContentPane().add(recordLabel3, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel3); 
       getContentPane().add(recordLabel4, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel4); 
       getContentPane().add(pausedLabel, "Center"); 
       setVisible(false); 
+0

編輯:我試圖改變一個固定的JLabel中的圖像,而不是添加或刪除組件...沒有工作! –

+0

編輯:我也試着切換包含不同的圖像有形和無形的許多不同的層疊窗口......沒有工作! –

+2

什麼答案下面不解釋也是爲什麼什麼也沒有發生。這是因爲你的代碼在Swing事件線程中運行,當你睡覺時,你暫停該線程。雖然需要線程來更新和顯示Swing組件,所以睡眠時不會發生任何事情。 –

回答

8

這是使用Swing Timers的好時機。

您應該:

  • 儲存您的標籤/圖片在一個陣列,而不是在不同的變量
  • 設置計時器,在上面
  • 在計時器事件教程指出,剛剛通過旋轉你的標籤陣列

所有你需要的是在你的班級裏有一個額外的成員,它存儲了你當前顯示的圖片號碼。當計時器火災,使用該成員從窗格中刪除當前項目,增加它(模你必須元素的總數),並插入新的。

+1

用於'javax.swing.Timer'的+1;另見['ImageLabelPanel'](http://stackoverflow.com/questions/3078178/jpanel-in-puzzle-game-not-updating/3078354#3078354)。 – trashgod