Swing中的分层面板带有自定义绘画

时间:2012-03-24 22:13:51

标签: java swing

我正在用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的任何建议?

UI prototype

2 个答案:

答案 0 :(得分:3)

getGraphics().drawImage(image, xPos, yPos, 300, 300, null); // WRONG!!
  1. 请勿致电getGraphics() - 而是覆盖paintComponent(Graphics)JPanel的{​​{1}},并在要求时进行绘画。
  2. 使用JComponent作为this

答案 1 :(得分:0)

This article描述了使用JLayeredPane和一个抽象基类来覆盖给定Swing组件上的任意效果。