java如何确保覆盖图中的正确绘图顺序?
我使用JPanel
和OverlayLayout
来绘制两个相互不相关的组件。具体来说,我有一个透明组件,其中包含我自己的线条图,在它下面,我使用了一个JMapViewer
组件,它显示OpenStreetMap分幅。这很有效
JMapViewer异步加载分幅时除外。在这种情况下,当加载完成时,它会在自身上调用repaint()
,并在我的行层上绘制自己。我的行层无法知道这一点,因为它无法知道JMapViewer何时选择重新绘制自己
现在,我希望JPanel
在贴图层重新绘制时重新绘制我的线层,因为它知道正确的绘制顺序,并且知道必须重新绘制我的线层。但它不能做到这一点
你将如何解决这个问题
# 1 楼答案
^{} 实现
TileLoaderListener
,并在加载完成时简单地调用repaint()
。您应该能够更新地图,然后将事件转发到图层,如下所示# 2 楼答案
这取决于
JMapViewer
如何重新绘制自身。如果它只是更新了它的内容,那么父级甚至可能没有注意到某些内容已经更改# 3 楼答案
改为在父面板上调用repaint()
# 4 楼答案
我不知道这是否是最好的方法,但这是我唯一能想到的方法。您可以将JMapComponent的重新绘制管理器替换为一个自定义管理器,该管理器还可以管理覆盖组件的重新绘制。这样,您可以保证覆盖的组件总是在最后重新绘制
。。。通过SwingUtilities从AWT事件线程执行此操作