2015-10-18 48 views
0

所以我很難實現Jframe圖像/圖標的變化。我正在使用for循環,並且想要將Jframe的圖像更改爲相應的圖像,但是我要麼將其卡在第一幀,要麼將它們堆疊在一起。我在網上看過,但他們只展示瞭如何最初更改Jframe,而不是在for循環中。Chaning Jframe圖像

這是我的代碼部分:

JFrame frame = new JFrame(); 

for(int frameNum = 0; frameNum < fg.getLengthInFrames(); frameNum++) { 

     ImageIcon icon = new ImageIcon(img); 
     JLabel label = new JLabel(icon); 
     frame.add(label); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // close canvas once the window is closed 
     frame.pack(); 
     frame.setVisible(true); 

} 
+0

什麼是理想的結果嗎?當前循環打包anf setVisible = true爲每個迭代...我想你不想包括包和setVisible內循環,但我沒有完全明白你想要達到什麼。 – chenchuk

回答

1
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class Test{ 
    public static void main(String[] args) { 
     for(int frameNum = 0; frameNum <=4; frameNum++) { 
      JFrame frame = new JFrame(); 
       ImageIcon icon = new ImageIcon("G:/Skypecartoons/we.jpg"); 
       JLabel label = new JLabel(icon); 
       frame.add(label); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // close canvas once the window is closed 
       frame.pack(); 
       frame.setVisible(true); 
     } 
    } 


} 
0

如果你想改變你需要的東西,會等待一段時間讓用戶看到圖標時的圖標。您需要先設置框架,然後只更改圖標。

// setup first  
JFrame frame = new JFrame(); 
ImageIcon icon = new ImageIcon(img); 
JLabel label = new JLabel(icon); 
frame.add(label); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // close canvas once the window is closed 
frame.pack(); 
frame.setVisible(true); 

...

// show the frames. 
for(int frameNum = 0; frameNum < fg.getLengthInFrames(); frameNum++) { 
     final ImageIcon nextIcon = new ImageIcon(img); 
     java.awt.EventQueue.invokeLater(() -> { 
      label.setIcon(nextIcon); 
     }); 
     Thread.sleep(500); 
}