2012-03-24 52 views
1

我正在使用Swing爲UI編寫Java應用程序中的繪圖應用程序(本文結尾包含原型繪圖)。該映射是使用擴展JPanel的自定義MapPanel類實現的。地圖從服務器獲取爲一系列300x300圖像(圖塊),只要調用paintMap()方法,該圖像就會繪製在MapPanel上。由於代碼的長度和複雜性(多類等)我不能包括所有的在這裏,但paintMap()方法大致如下:在Swing中使用自定義繪畫的分層面板

// Loop for each map tile (image, xPos, yPos) 
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); 

我想有其他的JPanel (包含用於縮放控制的JSlider)疊加在地圖面板的頂部,但是我很難解決這個問題。每當我繪製地圖時,覆蓋的JPanel都會消失。如果我在paintMap()方法中重繪覆蓋的JPanel,則在拖動地圖(並因此不斷重繪)時會嚴重閃爍。

有關如何實現我的UI而不閃爍的任何建議?

UI prototype

回答

3
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); // WRONG!! 
  1. 不要叫getGraphics() - 要求時這樣做,而不是重寫JPanelJComponent和油漆的paintComponent(Graphics)
  2. 使用this作爲ImageObserver
+0

將drawImage()調用移至paintComponent方法似乎解決了我的問題 - 謝謝! – Jonathan 2012-03-25 04:22:21

0

This article描述了使用的JLayeredPane和一個抽象基類到overpaint上的給定Swing組件的任意影響。