2012-03-24 53 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组件的任意影响。