2012-10-08 72 views
1

雖然經歷了那麼閱讀宗教,我已經看到了通過經典在Java中使用GIF動畫的例子很多:觸發paintComponent(Java)的Gif動畫?

JLabel mylabel=new JLabel(new ImageIcon("animated.gif")); 

工作正常,但是當我添加mylabel到JPanel,我注意到JPanel的paintComponent每當gif更改幀時,方法都會被調用。

這真的有必要嗎?
是不是GIF與JLabel分離?

每次gif循環幀時,重新繪製整個面板(以及其他任何其他組件)似乎都是耗費時間的昂貴浪費。

如果您想知道爲什麼我在意:從做網頁設計(js/css),我學會了如何幾乎完全避免迴流,並將重繪僅隔離到被更改的元素。工作奇蹟的表現。

+1

*「工作奇蹟的表現。」*研究[過早優化](http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize)。這個問題反映了它。 –

+0

順便說一句 - 如果'。/'表示當前目錄/包,'../'表示父目錄,那麼'... /'是什麼意思? –

+0

@AndrewThompson這不是不成熟的。我完成了這個小應用程序,然後注意到了代碼中的行爲。 – Nikki

回答

4

這真的有必要嗎?

是:選擇JLabel在默認情況下不不透明,這就是爲什麼它的父必須重繪自己背後標籤上的變化。而如果你曾探討更深層次:父只有重畫後面的區域標籤(見剪輯)

+0

迷人。我無法回想在javadocs教程中讀到的內容。 (儘管我可能並沒有吸收它)。你怎麼知道所有這些東西,而不會提及文檔?你一定是某種........ oracle:P – Nikki

+0

不,不。神諭**回答法老。是的,我認爲在'paintComponent(Graphics)'中放置一個'println'並不是非常有用(除了確認它被重複調用)之外。 –