zor_k | Bonjour,
je m'interresses à Batik depuis quelques temps maintenant car je dois developper en Java une appli de création et d'animation de dessin vectoriel.
Seulement voila, j'ai beaucoup de mal à comprendre le fonctionnement de batik.
J'ai bien entendu lu ce qui se trouve à l'adresse xml.apache.org/batik, lu le wiki et son contenu, lu le (tres) mini howto sur carto.net... et en plus je decortique l'appli GLIPSGraffiti mais je rames c'est un truc de dingue. Alors voila, je me lance, je n'arrive pas du tout à gerer le DnD (par exemple). Bien entendu j'ai lu l'exemple du WiKi mais ca reste super obscure pour moi. L'on m'a dit qu'il fallait rajouter id="draggables"> mais comment faire ? Et apres si je me contente de copier coller le code du wiki ca passe pas...
De plus, je ne comprends pas à quoi sert un Jscrollpane, je le vois souvent mais quel est son utilité par rapportà un svgcanvas ?
Je penses que je dois poser des questions un peu "bete" mais je rame tellement c'est dingue, j'arrete pas de lire de la doc mais j'avance à la vitesse d'un escargot...
Voici le peu que j'ai reussi à faire :
Code :
- import java.awt.*;
- import java.awt.event.*;
- import java.awt.geom.Ellipse2D;
- import java.io.*;
- import javax.swing.*;
- import org.apache.batik.dom.svg.SVGDOMImplementation;
- import org.apache.batik.svggen.SVGGraphics2D;
- import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
- import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
- import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
- import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
- import org.apache.batik.swing.svg.GVTTreeBuilderAdapter;
- import org.apache.batik.swing.svg.GVTTreeBuilderEvent;
- import org.w3c.dom.DOMImplementation;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.svg.SVGDocument;
- import shape.ShapeCircle;
- import shape.ShapeRectangle;
- public class SVGApplication {
- public static void main(String[] args) {
- JFrame.setDefaultLookAndFeelDecorated(true);
- JFrame f = new JFrame("Batik" );
- SVGApplication app = new SVGApplication(f);
- f.getContentPane().add(app.createComponents());
- f.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- System.exit(0);
- }
- });
- f.setSize(400, 400);
- f.setVisible(true);
- }
- ImageIcon convertIconCircle = createImageIcon("icons/circle.png","Cercle" );
- ImageIcon convertIconRectangle = createImageIcon("icons/rect.png","Rectangle" );
- ImageIcon convertIconEllipse = createImageIcon("icons/ellipse.png","Ellipse" );
- ImageIcon convertIconProperties = createImageIcon("icons/properties.png","Properties" );
- static protected JFrame frame;
- JButton button = new JButton("Load..." );
- JButton buttonProperties = new JButton(convertIconProperties);
- JButton buttonCircle = new JButton(convertIconCircle);
- JButton buttonRectangle = new JButton(convertIconRectangle);
- JButton buttonEllipse = new JButton(convertIconEllipse);
- static protected JLabel label = new JLabel();
- Canvas svgCanvas = new Canvas();;
- public SVGApplication(JFrame f) {
- frame = f;
- }
- public JComponent createComponents() {
- final JPanel panel = new JPanel(new BorderLayout());
- JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
- p.add(button);
- p.add(buttonProperties);
- p.add(buttonCircle);
- p.add(buttonRectangle);
- p.add(buttonEllipse);
- p.add(label);
- panel.add("North", p);
- panel.add("Center", svgCanvas);
- // Set the button action.
- button.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- JFileChooser fc = new JFileChooser("." );
- int choice = fc.showOpenDialog(panel);
- if (choice == JFileChooser.APPROVE_OPTION) {
- File f = fc.getSelectedFile();
- try {
- svgCanvas.setURI(f.toURL().toString());
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }
- });
- buttonProperties.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- svgCanvas = new Canvas();
- }
- });
- buttonCircle.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- Document doc =svgCanvas.getDocument();
- ShapeCircle circle = new ShapeCircle(doc,svgCanvas.getSvgNamespaceURL());
- svgCanvas.setDocument(doc);
- }
- });
- buttonRectangle.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- Document doc =svgCanvas.getDocument();
- ShapeRectangle rectangle = new ShapeRectangle(doc, svgCanvas.getSvgNamespaceURL());
- svgCanvas.setDocument(doc);
- }
- });
- return panel;
- }
- protected static ImageIcon createImageIcon(String path, String description) {
- java.net.URL imgURL = SVGApplication.class.getResource(path);
- if (imgURL != null) {
- return new ImageIcon(imgURL, description);
- } else {
- System.err.println("Couldn't find file: " + path);
- return null;
- }
- }
|
Code :
- import java.awt.AlphaComposite;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Shape;
- import java.awt.geom.*;
- import org.apache.batik.dom.svg.SVGDOMImplementation;
- import org.apache.batik.svggen.SVGGeneratorContext;
- import org.apache.batik.svggen.SVGGraphics2D;
- import org.w3c.dom.DOMImplementation;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.svg.SVGDocument;
- public class MySVGGenerator{
- public MySVGGenerator(Document doc, String svgNamespaceURL) {
- Element rect = doc.createElementNS(svgNamespaceURL,"rect" );
- rect.setAttributeNS(null,"x","10" ); rect.setAttributeNS(null,"y","20" );
- rect.setAttributeNS(null,"width","100" );
- rect.setAttributeNS(null,"fill-opacity","0.7" );
- rect.setAttributeNS(null,"height","50" );
- rect.setAttributeNS(null,"style","fill:red" );
- Element svgRoot = doc.getDocumentElement();
- Shape circle = new Ellipse2D.Double(0, 0, 50, 50);
- g.setPaint(Color.BLUE);
- g.fill(circle);
- g.getRoot(svgRoot);
- svgRoot.appendChild(rect);
- }
- }
|
Code :
- package shape;
- import org.apache.batik.svggen.SVGGeneratorContext;
- import org.apache.batik.svggen.SVGGraphics2D;
- import org.w3c.dom.DOMImplementation;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.svg.SVGDocument;
- /**
- * @author Grillot
- *
- * TODO Pour changer le modèle de ce commentaire de type généré, allez à :
- * Fenêtre - Préférences - Java - Style de code - Modèles de code
- */
- public class ShapeCircle {
- // private static ImageHandler ihandler = (ImageHandler) new CachedImageHandlerPNGEncoder("res/images",null);
- private DOMImplementation domImpl;
- private Document myFactory;
- private SVGGeneratorContext ctx;
- private SVGGraphics2D svgGenerator;
- private SVGDocument doc;
- private String svgNS;
- public ShapeCircle(Document doc, String svgNamespaceURL) {
- Element circle = doc.createElementNS(svgNamespaceURL,"circle" );
- circle.setAttributeNS(null,"cx","10" );
- circle.setAttributeNS(null,"cy","20" );
- circle.setAttributeNS(null,"r","25" );
- circle.setAttributeNS(null,"style","fill:red" );
- Element svgRoot = doc.getDocumentElement();
- svgRoot.appendChild(circle);
- }
- //cx="60" cy="60" r="40"
- }
|
Ah oui en plus, comment faire pour pouvoir utiliser la transparence ou juste la bordure des elements avec des svggraphics2D car pour le moment je ne sais pas le faire differement qu'avec le code ci dessus...
En esperant de tout coeur un p'tit coup de pouce !
Amicalement
Seb |