java - 我可以创建没有 svg 文件的 JSVGCanvas 吗?

标签 java swing svg jython batik

浏览 documentation for JSVGCanvas ,看来我可能无法做到这一点。但是,这很有意义。如何从 String 变量而不是 File 创建 JSVGCanvas

我的想法是我可以做如下事情:

String svg = "svg data";
JFrame frame = new JFrame();
JSVGCanvas canvas = new JSVGCanvas();
canvas.setContentsFromString(svg);
frame.add(canvas);
frame.setVisible(true);

我知道我总是可以创建一个临时文件并从文件中设置 JSVGCanvas 的内容,但我宁愿避免这样做。我可以扩展 File 并覆盖它的方法吗?

注意:我使用的是 Jython,但我认为这也与 Java 相关,因此我同时使用了这两个标签。我更喜欢 Java 解决方案,但 Jython 解决方案也行

最佳答案

是的,你可以:

String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
SVGDocument document = factory.createSVGDocument("", new ByteArrayInputStream(svg.getBytes("UTF-8")));

canvas.setSVGDocument(document);

这是通过 SAXSVGDocumentFactory 创建一个 SVGDocument 来实现的。 SAXSVGDocumentFactory 有一个方法 createSVGDocument(String, InputStream) ,其中字符串应该是 InputStream 表示的文件的 URI。然而,我们滥用它并给它一个空字符串,并使 InputStream 成为来 self 们的 svg-data String 的流。

使用 "" 可能会引发关于它们没有协议(protocol)的异常,具体取决于 Batik 的版本。如果是这种情况,请尝试 "file:///",即给它一个谎言的 URI。您可能想使用实际的 URI;你需要找出一个有效的给 Batik

关于java - 我可以创建没有 svg 文件的 JSVGCanvas 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30824711/

相关文章:

java - 使用Java计算第一个和最后一个数字之间并包括第一个和最后一个数字的所有数字的平均值

java - 如何更改 JTable 中按钮的字体

css - 如何在不遵守 Firefox 中的宽高比的情况下缩放 SVG 背景图像?

html - 内联 SVG &lt;title&gt; <desc> 可访问性的正确用法

java - 为什么执行器框架中的任务是线程

java - 在 Java 中获取 super 接口(interface)

java - 运行 java 的预定义输入脚本

java - Swing 不在 Applet 中绘图

java - 从 JTextField 转换时出现 NumberFormatException

css - 存在外部链接时,SVG css3 过渡填充不起作用