gpt4 book ai didi

java - DOM 更改后,如何使用 Batik 获取 SVG 来刷新/显示?

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:18 25 4
gpt4 key购买 nike

我遵循此处的准则:http://xmlgraphics.apache.org/batik/faq.html并仔细阅读他们的邮件列表。我已经尝试了我能想到的一切。这是我想要完成的一个非常简单的例子。布局管理器是:http://java.sun.com/products/jfc/tsc/articles/tablelayout/或者你可以使用 gridbag 或任何你喜欢的东西。 XmlHelper 是内部库,您可以用自己的库替换。不包括在内以减少代码大小。

基本上,在您点击“向上”按钮(更新的缩写)后,它会修改 DOM 并添加一个新元素,但我没有看到 SVG 更新。

..

public class SvgRefresh extends JFrame
{
private static final NAMESPACE = "http://www.w3.org/2000/svg";

private JSVGCanvas canvas;
private Document document;
private JButton button;

public static void main(String[] args)
{
SvgRefresh svgRefresh = new SvgRefresh();

svgRefresh.pack();
svgRefresh.setVisible(true);
}

public SvgRefresh()
{
canvas = new JSVGCanvas();
initialize();
}

private void initialize()
{
double[][] size = {{ TableLayout.FILL, 0.1, TableLayout.FILL}, { TableLayout.FILL, 0.1 }};
getContentPane().setLayout(new TableLayout(size));

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
document = XmlHelper.readDocumentFromFile("F:/SVG/svg01.svg");

canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
canvas.setDocument(document);

document = canvas.getSVGDocument();

getContentPane().add(canvas, "0, 0, 2, 0");
getContentPane().add(getButton(), "1, 1");
}

private JButton getButton()
{
if(button == null)
{
button = new JButton("Up");

button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
UpdateManager updateManager = canvas.getUpdateManager();

updateManager.getUpdateRunnableQueue().invokeLater(new Runnable()
{
@Override
public void run()
{
Element root = document.getDocumentElement();
Element text = document.createElementNS(NAMESPACE, "text");

text.setAttributeNS(NAMESPACE, "x", "100");
text.setAttributeNS(NAMESPACE, "y", "100");
text.setTextContent("It worked!!!");

root.appendChild(text);
System.out.println("ran");
}
});
}
});
}

return button;
}
}

原始 SVG(用 AI 制作,我编辑了除文本元素之外的所有内容):

<?xml version="1.0" encoding="UTF-8"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="application/ecmascript" zoomAndPan="magnify" contentStyleType="text/css" enable-background="new 0 0 400 200" version="1.1" xml:space="preserve" width="400px" preserveAspectRatio="xMidYMid meet" viewBox="0 0 400 200" height="200px" x="0px" y="0px">
<text x="40" y="40">Default text</text>
</svg>

上面的代码不包括写入文件 - 我已排除空间。按 UP 按钮后的 SVG 并写入文件(以检查命名空间)。当按下“UP”按钮后写入文件时,就会生成此文件 - 这对我来说看起来很完美。

<?xml version="1.0" encoding="UTF-8"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="application/ecmascript" zoomAndPan="magnify" contentStyleType="text/css" enable-background="new 0 0 400 200" version="1.1" xml:space="preserve" width="400px" preserveAspectRatio="xMidYMid meet" viewBox="0 0 400 200" height="200px" x="0px" y="0px">
<text x="40" y="40">Default text</text>
<text x="100" y="100">It worked!!!</text>
</svg>

感谢您的帮助。哦,为了鼓励研究以及人们花时间给出答案,我可能会等待大约 24 小时才能给出答案。因此,如果需要,请花点时间运行代码。

最佳答案

改变一下

          text.setAttributeNS(NAMESPACE, "x", "100");
text.setAttributeNS(NAMESPACE, "y", "100");

          text.setAttributeNS(null, "x", "100");
text.setAttributeNS(null, "y", "100");

它会很好地更新

关于java - DOM 更改后,如何使用 Batik 获取 SVG 来刷新/显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674831/

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