我正在用Java编写一个映射应用程序,使用Swing作为UI(我在本文末尾包含了一个原型图)。该地图使用扩展JPanel的自定义MapPanel类实现。地图从服务器获取为一系列300x300图像(图块),只要调用paintMap()方法,就会在MapPanel上绘制这些图像。由于代码的长度和复杂性(多个类等),我不能在这里包含所有内容,但paintMap()方法基本上是这样的:
// Loop for each map tile (image, xPos, yPos)
getGraphics().drawImage(image, xPos, yPos, 300, 300, null);
我想在地图面板顶部覆盖另一个JPanel(包含用于缩放控制的JSlider),但是我很难让它工作。每当我绘制地图时,叠加的JPanel都会消失。如果我在paintMap()方法中重新绘制重叠的JPanel,那么当拖动地图时(由于连续重新绘制),它会闪烁不正。
关于如何在不闪烁的情况下实现UI的任何建议?
答案 0 :(得分:3)
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); // WRONG!!
getGraphics()
- 而是覆盖paintComponent(Graphics)
或JPanel
的{{1}},并在要求时进行绘画。JComponent
作为this
答案 1 :(得分:0)
This article描述了使用JLayeredPane和一个抽象基类来覆盖给定Swing组件上的任意效果。