2017-04-19 18 views
2

我正在使用兩個.gif文件並將它們切換到一個幀中。如何從Java Swing的第一幀啓動.gif文件?

private Image currentGIF; 

if(x == 0) gif = "image1.gif" 
if(x == 1) gif = "image2.gif" 
ImageIcon reference = new ImageIcon(gif); 
currentGIF = reference.getImage(); 

-

public void paint(Graphics g) 
{ 
    Graphics2D graphic = (Graphics2D) g; 
    graphic.drawImage(gif, 0, 0, this); 
    g.dispose(); 
} 

-

@Override public void actionPerformed(ActionEvent arg0) 
{ 
    repaint(); 
} 

這是我的問題:

  1. image1.gif開始在第一幀。
  2. image2.gif從第一幀開始。
  3. image1.gif從隨機幀開始。

看來.gif保持運行,當我告訴image1再不會在第一幀開始。

+0

您可能還想看看['Image#flush'](http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html#flush( )) – MadProgrammer

回答

2

問題:

  1. 永不覆蓋一個JFrame的paint方法,而是一個JPanel的paintComponent方法裏面內完成繪圖。
  2. 切勿將被JVM給你的畫法(油漆或的paintComponent)Graphics對象,因爲這打破了繪畫鏈。
  3. 不要在繪畫方法中更改GUI的狀態(例如交換圖像)。取而代之的是在某種類型的偵聽器中進行處理,這些偵聽器會對您想要用來更改圖像的事件做出反應 - 例如,如果按鈕按下時更改按鈕的ActionListener,或者更改圖像時使用Swing Timer的ActionListener在計時器改變。
  4. 如果這不是一個GIF動畫,強烈考慮將圖像轉換成一個ImageIcon,只需再次使用setIcon(...)與您希望使用監聽器換一個JLabel的圖標。
相關問題