2015-04-05 49 views
0

我已經創建了一個JLabel,它的圖像在兩幀之間來回切換。帶變化圖標的螺紋JLabel在另一個不斷變化的圖標上

private class CustomLabel extends JLabel implements Runnable 
{  
    ImageIcon car1=new ImageIcon(/*icon*/);//makes the wave equal to the wave in outer class (passing reference) 
    ImageIcon car2=new ImageIcon(/*icon*/); 
    ImageIcon currentCar; 
    int current=0; 


    public CustomLabel() 
    { 
     if(x>0 && y<11)setIcon(wave1); 

     new Thread(this).start();//am i starting this right? 
    } 

    @Override 
    public void run() 
    { 
     while (true) 
     { 
     if(current == 0) 
     { 
     setIcon(wave1); 
     current++; 
     } 
     else 
     { 
     setIcon(wave2); 
     current--; 
     } 
     repaint(); 
     try { Thread.sleep(150); } 
     catch (InterruptedException e) { } 
     } 
    } 
} 

所以當我添加這個JLabel它會在兩個車圖片之間交替。 首先,我通過在構造函數中啓動線程來正確啓動線程?

現在我們假設我想要在汽車之上有另一個動畫,那就是當我單擊JLabel時發生的5幀構成的爆炸動畫。我如何去關於在當前動畫上覆蓋第二個線程動畫。我覺得我需要重寫paintComponent(),但我不太確定如何做到這一點。

回答

2

是的,你正在開始你的線程,但是你正在做你的後臺線程中的Swing狀態改變調用,setIcon(...)和有風險的

我自己,我會用一個Swing Timer來驅動我的動畫,就像一個定時器一樣,它的ActionListener中的所有調用都將在Swing事件線程中進行,從而形成一個更安全的循環。我不確定我是否會爲此擴展JLabel,因爲我沒有改變班級的任何先天行爲。相反,我會使用JLabel。

我也將MouseListener添加到我的標籤和mousePressed,我會停止此計時器並啓動爆炸動畫計時器。

+0

我明白了...感謝您的幫助。有沒有辦法讓第一個動畫繼續前進,並在其上添加另一個動畫?這甚至可以用JLabel。使用JPanel將圖標放在另一個圖標上會更好嗎? – user234234234 2015-04-05 02:19:25

+0

@ user234234234我不知道你在做什麼 - 你是否試圖連續交換JLabel並在其上添加另一個動畫?你的JLabel一次只能顯示一個ImageIcon,所以你需要做一些其他的事情,也許可以在玻璃窗或其他窗體中繪製。 – 2015-04-05 02:21:53

+0

是的,這正是我想要做的。我可以使用JPanel,然後在背景上繪製圖像嗎? – user234234234 2015-04-05 02:25:50