こちらのガイドラインはhttp://xmlgraphics.apache.org/batik/faq.htmlで、メーリングリストのページを読んでいます。私は考えることができるすべてを試しました。ここで私が達成しようとしているものの非常に単純な例があります。レイアウトマネージャー:http://java.sun.com/products/jfc/tsc/articles/tablelayout/または、あなたが好きなものを使用することができます。 XmlHelperは社内のlibであり、あなた自身のもので代用することができます。コードサイズを減らすためには含まれていません。DOMが変更された後、BatikでSVGをリフレッシュ/表示する方法を教えてください。
「アップ」ボタン(更新の略)を押すと、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時間待つでしょう。だから、必要なら時間をかけてコードを実行してください。
を更新し、次にあなたが左上隅にいくつかのノイズが表示されますウィンドウのサイズを変更します。新しいテキストがここにあります。 変換やレンダリングで何らかの問題が起きていると確信しています – yggdraa