如何在Java中制作透明的SVG图像?

3

我有一个SVG文件,实际上是空的,没有元素。我将在Java代码中通过添加元素来操作它。SVG文件将被插入到滚动窗格中。问题是即使SVG文件实际上为空,滚动窗格也不透明,即使我已经设置了它透明。

这是SVG文件(我从客户端那里得到的):

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
<svg version="1.1"
 baseProfile="full"
 xmlns="http://www.w3.org/2000/svg"
 xmlns:xlink="http://www.w3.org/1999/xlink"
 xmlns:ev="http://www.w3.org/2001/xml-events">
 id="chart"
 width="1366px" height="768px" viewBox="0 0 1366 768" >
<defs>
   <!-- some template here -->
</defs>
</svg>

这是滚动窗格部分(canvasDiagram 是 SVGCanvas)。

// the instantiation part
canvasDiagram.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
canvasDiagram.setURI(getClass().getResource("path to svg file").toString());
scrollPane = new JScrollPane(canvasDiagram){
        {
            setOpaque(false);
            getViewport().setOpaque(false);
        }
    };
滚动面板不透明,而是白色的。我尝试使用透明的jPanel插入滚动面板内容,它可以工作,因此我认为白色内容是由于canvasDiagram引起的。你能帮我使canvasDiagram的空白部分变得真正透明吗?

“transparnet.png”? 为什么你在那里使用 png 文件?SVG 还是 PNG? - J-16 SDiZ
这是为了使滚动窗格透明化。这算是一种变通的方法。我想要透明化的是canvasDiagram。我已经进行了编辑,应该更清楚了。 - dieend
这是XML定义的问题吗?对我来说,这听起来像是Java的问题。顺便说一下:不要包括DOCTYPE声明 - feeela
那么这是Java啊?我将删除XML标签。 好的。我会删除SVG中的所有DTD。谢谢。 - dieend
1个回答

1

我发现使用带有 alpha 值的背景比设置 isOpaque(false) 更可靠。

setBackground(new Color(0,0,0,0));

能否仅显示边框?因为我使用了这个,但边框也消失了。 - Giannis Tzagarakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接