我正在用 Java 编写 map 应用程序,使用 Swing 作为 UI(我在本文末尾附上了原型(prototype)图)。该 map 是使用扩展 JPanel 的自定义 MapPanel 类实现的。 map 作为一系列 300x300 图像(瓦片)从服务器获取,只要调用其 paintMap() 方法,这些图像就会绘制在 MapPanel 上。由于代码的长度和复杂性(多个类等),我无法在此处包含所有代码,但 paintMap() 方法基本上是这样工作的:
// Loop for each map tile (image, xPos, yPos)
getGraphics().drawImage(image, xPos, yPos, 300, 300, null);
我想让另一个 JPanel(包含一个用于缩放控制的 JSlider)覆盖在 map 面板的顶部,但我很难让它工作。每当我绘制 map 时,覆盖的 JPanel 都会消失。如果我在 paintMap() 方法中重新绘制覆盖的 JPanel,当拖动 map 时它会严重闪烁(因此会不断重新绘制)。
关于如何在不闪烁的情况下实现我的 UI 有什么建议吗?
最佳答案
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); // WRONG!!
- 不要调用
getGraphics()
- 而是覆盖JPanel
或JComponent
的paintComponent(Graphics)
> 并根据要求进行绘画。 - 使用
this
作为ImageObserver
关于java - Swing 中带有自定义绘画的分层面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856093/