1. You must make changes to the SVGDocument in a Runnable object that is run in the JSVGCanvas.getUpdateManager().getUpdateRunnableQueue();
________________________________ From: Qian Li [mailto:[EMAIL PROTECTED] Sent: Fri 9/14/2007 12:31 PM To: [email protected] Subject: Help, I cannot get JSVGCanvas to display newly added Element to SVGDocument Dear All, 1. I am trying to add an rect to the SVGDocument and then display it in the JFrame. The JSVGCanvas can only display things which are on the main.svg, I cannot get it to display the new rect element which i have just added. I hope someone would help me out. Thank you so much. The source code appended in the end of the message. 2. I cannot find the org.w3c.dom.svg.SVGDocument java source and documentation in batik 1.7. Is it only available in batik 1.5? Does anyone know where I can find it? Thank you very much. Kind regards, Qian /**********************MainSVGJFrame.java*********************************/ import org.apache.batik.dom.svg.SAXSVGDocumentFactory; import org.apache.batik.swing.JSVGCanvas ; import org.apache.batik.util.XMLResourceDescriptor; import org.w3c.dom.Element; import org.w3c.dom.svg.SVGDocument; public class MainSVGJFrame extends javax.swing.JFrame { JSVGCanvas jsvgcanvas; SVGDocument svgDoc; Element svgRoot; /** Creates new form MainSVGJFrame */ public MainSVGJFrame() { initComponents(); jsvgcanvas = new JSVGCanvas(); jsvgcanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC); String parser = XMLResourceDescriptor.getXMLParserClassName(); SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); try{ svgDoc = (SVGDocument)f.createDocument("file:d:/workspace/TestSVG/svgElement/main.svg"); //svgDoc = (SVGDocument)f.createDocument("file:/home/qianli/workspace/TestSVG/svgElement/svgBox.svg"); }catch(Exception e){ e.printStackTrace(); } // get the root element (the svg element) svgRoot = svgDoc.getRootElement() ; System.out.println("svgDoc:::"+svgDoc.toString()); System.out.println("svgRoot:::"+svgRoot.getTagName() ); // set the width and height attribute on the root svg element svgRoot.setAttributeNS(null, "width", "400"); svgRoot.setAttributeNS(null, "height", "450"); // create the rectangle Element rectangle = svgDoc.createElement("rect"); rectangle.setAttributeNS (null, "id", "box"); rectangle.setAttributeNS(null, "x", "20"); rectangle.setAttributeNS(null, "y", "20"); rectangle.setAttributeNS (null, "rx", "20"); rectangle.setAttributeNS(null, "ry", "20"); rectangle.setAttributeNS(null, "width", "150"); rectangle.setAttributeNS (null, "height", "100"); rectangle.setAttributeNS(null, "style", "fill:red;stroke:black;stroke-width:5;opacity:0.5"); // attach the rectangle to the svg root element svgRoot.appendChild(rectangle); Element box = svgDoc.getElementById("box"); System.out.println("box:::"+box.getTagName() ); jsvgcanvas.setDocument(svgDoc); jsvgcanvas.updateUI(); // jsvgcanvas.setURI("file:/home/qianli/workspace/TestSVG/svgElement/svgBox.svg"); jPanelMain.add(jsvgcanvas); this.pack(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { jPanelMain = new javax.swing.JPanel(); jPanelControl = new javax.swing.JPanel(); jButtonCreateBox = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE ); jPanelMain.setLayout(new java.awt.BorderLayout()); jPanelMain.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanelMain.setPreferredSize(new java.awt.Dimension(500, 500)); getContentPane().add(jPanelMain, java.awt.BorderLayout.CENTER); jPanelControl.setLayout(new java.awt.GridBagLayout()); jPanelControl.setBorder(javax.swing.BorderFactory.createEtchedBorder ()); jButtonCreateBox.setText("Create Box"); jButtonCreateBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCreateBoxActionPerformed(evt); } }); jPanelControl.add(jButtonCreateBox, new java.awt.GridBagConstraints()); getContentPane().add(jPanelControl, java.awt.BorderLayout.SOUTH); pack(); }// </editor-fold> /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainSVGJFrame().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButtonCreateBox; private javax.swing.JPanel jPanelControl; private javax.swing.JPanel jPanelMain; // End of variables declaration } /**********************main.svg************************************************/ <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg id="rootSVG" width="100%" height="100%" version=" 1.1" xmlns="http://www.w3.org/2000/svg"> <text id="mainText" x="100" y="50" > Main Frame </text> </svg>
<<winmail.dat>>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
