gpt4 book ai didi

java - Swing/batik 的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 09:06:32 24 4
gpt4 key购买 nike

我正在编写一个绘图应用程序,它使用 batik 框架的 JSVGCanvas 类。我的应用程序的内容 Pane 是一个 JLayeredPane,它包含多个相互堆叠的 JPanel。其中一个面板包含 JSVGCanvas,您可以在上面绘图。

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

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

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

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

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

编辑:

在 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 即可解决。

关于java - Swing/batik 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14709042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com