バティック フレームワークの JSVGCanvas クラスを使用する描画アプリケーションを作成しています。私のアプリケーションの contentpane は JLayeredPane で、複数の JPanel が互いに積み重なって保持されます。これらの Panel の 1 つは、描画できる JSVGCanvas を保持します。
ただし、画面にコンテンツを描画すると、次の図に示すように、画面の奇妙な断片が残ることがあります (黒い線はマウスで描画されています)。
図面のスクリーンショット http://cip.uni-trier.de/~schaefer/batikbug.jpg
カスタム ImageIcon を持つ赤い JButton にカーソルを合わせると同様のバグが発生するため、これがバティックの問題なのかスイングの問題なのかはわかりません。下の図では、他のボタンが赤いボタンの背景に表示されているように見えることがわかります。
ボタンのスクリーンショット 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 です。