Java 摇摆/蜡染的奇怪行为

Java 摇摆/蜡染的奇怪行为,java,swing,batik,Java,Swing,Batik,我正在编写一个绘图应用程序,它使用batik框架的JSVGCanvas类。我的应用程序的contentpane是一个JLayeredPane,它容纳几个堆叠在一起的JPanel。其中一个面板包含可以绘制的JSVGCanvas 但是,当我在屏幕上绘制内容时,有时会出现奇怪的屏幕碎片,如下图所示(黑线是用鼠标绘制的): 我不确定这是蜡染还是swing的问题,因为当我将鼠标悬停在带有自定义图像图标的红色按钮上时,会出现类似的错误。在下图中,您可以看到其他按钮似乎出现在红色按钮的背景中 有谁知道为什

我正在编写一个绘图应用程序,它使用batik框架的JSVGCanvas类。我的应用程序的contentpane是一个JLayeredPane,它容纳几个堆叠在一起的JPanel。其中一个面板包含可以绘制的JSVGCanvas

但是,当我在屏幕上绘制内容时,有时会出现奇怪的屏幕碎片,如下图所示(黑线是用鼠标绘制的):

我不确定这是蜡染还是swing的问题,因为当我将鼠标悬停在带有自定义图像图标的红色按钮上时,会出现类似的错误。在下图中,您可以看到其他按钮似乎出现在红色按钮的背景中

有谁知道为什么会发生这种情况,或者我如何解决

编辑:

在mouseDragged函数中,我执行以下操作:

//newNode was calculated before
Node updateNode = findNodeById(id); //find some node 
if(updateNode == null)
{   
    svgComponent.getSvgCanvas().getSVGDocument().adoptNode(newNode);
    svgComponent.getSvgCanvas().getSVGDocument().getDocumentElement().appendChild(newNode);
}
else
{       
    svgComponent.getSvgCanvas().getSVGDocument().adoptNode(newNode);                 
    svgComponent.getSvgCanvas().getSVGDocument().getDocumentElement().replaceChild(newNode, updateNode);
};
window.contentpane.repaint(); //window is the main JFrame, the contentpane is a JLayeredPane

svgComponent是一个包含JSVGCanvas的JComponent。

问题是,我在组件上使用了setOpaque(true)。将其设置为false就解决了这个问题。

为了更快地获得更好的帮助,发布一个项目非常复杂,我不知道如何生成一个复制错误的最小示例。不过,我确实编辑了我的问题,向您展示了发生错误时我会做什么。提前谢谢你的帮助,这就像大海捞针。不太可能有人会真的帮助你,我自己就知道了。我称之为setOpaque(真)和setBackground(新颜色(0f,0f,0f,0f));对于SVG组件。当我使用setOpaque(false)和setBackground(null)使其成为transparent时,它可以在没有这些奇怪工件的情况下工作。如果您不尊重不透明属性,您也可能会看到此类问题。