挥杆/蜡染的奇怪行为

时间:2013-02-05 13:48:09

标签: java swing batik

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

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

Screenshot of the drawing http://cip.uni-trier.de/~schaefer/batikbug.jpg

我不确定这是否是蜡染或摇摆的问题,因为当我将鼠标悬停在具有自定义ImageIcon的红色JButton上时会发生类似的错误。在下图中,您可以看到其他按钮似乎出现在红色按钮的背景中。

Screenshot of the button http://cip.uni-trier.de/~schaefer/swingbug.png

有人知道为什么会发生这种情况或我如何解决这个问题?

修改

在mouseDragged-function中,我正在执行以下操作:

//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。

1 个答案:

答案 0 :(得分:0)

问题是,我在我的组件上使用了setOpaque(true)。将其设置为false已经解决了它。