2

バティック フレームワークの 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 です。

4

1 に答える 1

0

問題は、コンポーネントでsetOpaque(true)を使用していたことです。falseに設定すると、解決しました。

于 2013-02-07T09:20:15.740 に答える