2011-05-18 53 views
3

我希望在JPanel上繪製一條垂直線,並使其滑過,而不用此過程調用JPanelpaintComponent()。我曾想過使用GlassPane,但我不認爲這是正確的方式,因爲框架中包含JPanel的其他組件,所以它不是特定於此(我並不確定它不會這樣做)無論如何,請撥打paintComponent())。在JPanel上繪製線條而不重繪

任何想法?

回答

1

也許你應該使用Layered Panes,如果你只是想從你的繪畫代碼的其餘部分隔離線條繪畫代碼。

如果你的繪畫代碼很貴,那麼也許你應該創建一個BufferedImage,然後在paintComponent()代碼中重新繪製圖像。這比每次從頭重新繪製都要快。

+0

我知道這個問題很老,但如果可以的話,我想選擇你的大腦。如果我將一個動畫gif添加到ImageIcon中,將其添加到JLabel並將JLabel添加到JPanel,則gif幀的循環將觸發JPanel的paintComponent方法。這真的有必要嗎? gif與圖標/標籤分離。我能否以某種方式停止鏈條漆? – Nikki 2012-10-08 06:50:32

2

即使使用GlassPane,底層組件也必須在某個時間點重新繪製。沒有一種方法可以避免對JPanel的paintComponent調用。

但是,JPanel不應該在paintComponent以外的地方做繪畫。如果您試圖避免調用它,那麼聽起來好像您在paintComponent方法中有某些內容需要以某種方式進行更改或緩存。

+0

是的,你說得對,我在'paintComponent'方法中做了太多事情。我想知道在做任何緩存之前是否有任何技術可以工作...... – krookedking 2011-05-18 16:08:11

+1

唯一可行的技術是緩存JPanel的像素,並使用另一個窗格將它們重新繪製在頂部。這將是棘手和有問題的,特別是當框架大小可能改變時。我強烈建議將非繪畫相關的動作移出paintComponent方法。 – jzd 2011-05-18 16:10:14

0

是否有原因導致您不想調用JPanel上的paintComponent()方法?重新繪製對象以使線條滑過它很可能是最簡單的解決方案。