You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Raghunadha R Kotha <ra...@verniernetworks.com> on 2002/09/09 20:24:12 UTC
Can't display SVG document in JPanel
Hi,
I have this program, Doesn't throw any exception and doesn't display
SVG document either. Can some one shed some light on this.
I am trying to display an SVG document in JPanel. It doesn't display SVG
document In the Panel.
What am I doing wrong?
Thanks in advance.
Raghu
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import org.w3c.dom.svg.SVGAElement;
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.InputSource;
import org.apache.batik.gvt.GraphicsNode;
import org.apache.batik.bridge.GVTBuilder;
import org.apache.batik.bridge.UserAgent;
import org.apache.batik.bridge.BridgeContext;
import org.apache.batik.gvt.event.EventDispatcher;
import org.apache.batik.gvt.filter.ConcreteGraphicsNodeRableFactory;
import org.apache.batik.bridge.UserAgent;
import org.apache.batik.bridge.BridgeExtension;
import org.apache.batik.bridge.UserAgentAdapter;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.bridge.BridgeException;
import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.util.XMLResourceDescriptor;
import org.apache.batik.dom.util.DOMUtilities.*;
import org.w3c.dom.svg.*;
import org.apache.batik.util.ParsedURL;
import java.awt.geom.AffineTransform;
import java.awt.geom.Dimension2D;
import java.awt.image.renderable.RenderContext;
public class SVGTagTest extends JFrame{
private SVGDocument doc;
//private Component canvas;
private JPanel canvas;
private Element svgElem;
private GraphicsNode graphicsNode;
public static void main(String[] args) throws Exception { SVGTagTest
test = new SVGTagTest(); }
public SVGTagTest() throws Exception {
JPanel mainPanel = new JPanel();
LayoutManager layout = new BorderLayout();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
setVisible(true);
//canvas = getContentPane(); getContentPane().setLayout(layout);
mainPanel.setBackground(Color.white);
getContentPane().add(mainPanel, BorderLayout.CENTER);
canvas = mainPanel;
read(new FileReader("/Temp/henryV.svg"));
displaySvg();
repaint();
}
public void read(Reader is) throws Exception{
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
try {
String parser =
XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory
(parser);
String uri = "http://...";
doc = (SVGDocument)f.createDocument(svgNS, is);
} catch (IOException ex) {
System.out.println("Can't load document");
}
/*
DOMImplementation impl =
SVGDOMImplementation.getDOMImplementation();
doc = (SVGDocument)impl.createDocument(svgNS, "svg", null); InputSource
saxIs = new InputSource(is); DOMParser parser = new DOMParser();
parser.setIncludeIgnorableWhitespace(false);
parser.setFeature
("http://apache.org/xml/features/dom/create-entity-ref-nodes",false);
parser.parse(saxIs);
doc = (SVGDocument)parser.getDocument();
*/
}
public void displaySvgOld(){
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
svgElem = (Element)doc.getElementsByTagNameNS
(svgNS, "svg").item(0);
if (svgElem == null) return;
GVTBuilder b = new GVTBuilder();
Graphics2D g = (Graphics2D)canvas.getGraphics();
UserAgent ua = new NLMSVGUserAgent(canvas);
BridgeContext ctx = new BridgeContext(ua);
graphicsNode = b.build(ctx, svgElem); // exception here!
graphicsNode.paint(g); }
public void displaySvg(){
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
svgElem = (Element)doc.getElementsByTagNameNS
(svgNS, "svg").item(0);
if (svgElem == null) return;
UserAgent userAgent = new
org.apache.batik.bridge.UserAgentAdapter();//new NLMSVGUserAgent
(canvas); // e.g. org.apache.batik.bridge.UserAgentAdapter
GVTBuilder builder = new GVTBuilder();
BridgeContext ctx = new BridgeContext(userAgent);
try {
graphicsNode = builder.build(ctx, doc);
} catch (BridgeException e){
System.out.println("Bridge Exception in DisplaySvg " +
e.getMessage());
}
Graphics2D g = (Graphics2D)canvas.getGraphics(); graphicsNode.paint(g);
}
private SVGDocument doc2svgDoc (Document doc) {
SVGDocument svgDoc;
svgDoc = (SVGDocument)
org.apache.batik.dom.util.DOMUtilities.deepCloneDocument(doc,
SVGDOMImplementation.getDOMImplementation());
return svgDoc;
}
}
class NLMSVGUserAgent extends UserAgentAdapter {
private Component component;
private AffineTransform transform;
public NLMSVGUserAgent(Component comp){
component = comp;
transform = new AffineTransform();
}
public Dimension2D getViewportSize() {
return component.getSize();
}
public EventDispatcher getEventDispatcher() {
return null;
}
public void displayError(String message) { System.out.println(message);
}
public void displayError(Exception ex) {
System.out.println(ex.getMessage());
}
public void displayMessage(String message) {
System.out.println(message); }
public float getPixelToMM() {
return 0.264583333333333333333f; // 96 dpi
}
public String getLanguages() {
return "en";
}
public String getUserStyleSheetURI() {
return null;
}
public void openLink(SVGAElement elt) {
}
protected void fireLinkActivatedEvent(SVGAElement elt,
String href) {
}
public void setSVGCursor(Cursor cursor) {
//JSVGComponent.this.setCursor(cursor);
}
public String getXMLParserClassName() {
return "org.apache.crimson.parser.XMLReaderImpl";
}
public AffineTransform getTransform() {
return transform;
}
public Point getClientAreaLocationOnScreen() {
return component.getLocationOnScreen();
}
public boolean hasFeature(String s) {
return false;
}
protected Map extensions = new HashMap();
public boolean supportExtension(String s) {
return extensions.containsKey(s);
}
public void registerExtension(BridgeExtension ext) {
Iterator i = ext.getImplementedExtensions();
while (i.hasNext())
extensions.put(i.next(), ext);
}
}
Raghu
raghu@verniernetworks.com
Direct Line: (650) 428-0449
Fax: (650)237-2201
http://www.verniernetworks.com
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-users-help@xml.apache.org