Package gps.svg.test

Source Code of gps.svg.test.GlassPane

package gps.svg.test;

import javax.swing.*;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.apache.batik.swing.*;
import org.w3c.dom.events.*;

/**
*
* @author Andres Toussaint
*/
class SvgGlassPaneExample {
   
    protected JSVGCanvas canvas;
    protected JLabel target;
    /** Creates a new instance of SvgGlassPaneExample */
    public SvgGlassPaneExample(JPanel panel) {
        panel.removeAll();
        canvas = new JSVGCanvas();
        canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
        canvas.setSize(400,400);
        canvas.setDocument(buildDocument());
        panel.add(canvas);
        panel.repaint();
    }
   
   
   
    protected Document buildDocument() {
        DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
        Document doc = impl.createDocument(svgNS, "svg", null);
       
        // get the root element (the svg element)
        Element svgRoot = doc.getDocumentElement();
       
        // set the width and height attribute on the root svg element
        svgRoot.setAttributeNS(null, "width", "400");
        svgRoot.setAttributeNS(null, "height", "400");
       
        // create the array of rectangles
        Element g = doc.createElementNS(svgNS, "g");
        g.setAttributeNS(null, "id", "rectangles");
       
        for (int x = 10; x < 400 ; x += 30) {
            for (int y = 10; y < 400; y += 30) {
                Element rectangle = doc.createElementNS(svgNS, "rect");
                rectangle.setAttributeNS(null, "x", "" + x);
                rectangle.setAttributeNS(null, "y", "" + y);
                rectangle.setAttributeNS(null, "width", "20");
                rectangle.setAttributeNS(null, "height", "20");
                rectangle.setAttributeNS(null, "style", "fill:red");
                rectangle.setAttributeNS(null, "id", "rect: " + x + ", "+ y);
                // attach the rectangle to the g element
                g.appendChild(rectangle);
            }
        }
       
        svgRoot.appendChild(g);
       
        return doc;
    }
   
    public void addGlassPane() {
        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
        Document doc = canvas.getSVGDocument();
        Element rectangle = doc.createElementNS(svgNS, "rect");
        rectangle.setAttributeNS(null, "x", "0");
        rectangle.setAttributeNS(null, "y", "0");
        rectangle.setAttributeNS(null, "width", "400");
        rectangle.setAttributeNS(null, "height", "400");
        rectangle.setAttributeNS(null, "style", "fill:none;pointer-events:fill");
        rectangle.setAttributeNS(null, "id", "glasspane");
        Element svgRoot = doc.getDocumentElement();
       
        svgRoot.insertBefore(rectangle, doc.getElementById("rectangles"));

    }
   
    public void registerListeners(JLabel target) {
        //this label provides feedback on the selected item
        this.target = target;
        // Gets an element from the loaded document.
        // document is your SVGDocument
        Element elt = canvas.getSVGDocument().getElementById("glasspane");
        EventTarget t = (EventTarget)elt;
        t.addEventListener("click", new GlassPaneClick(), false);
       
        Element elt2 = canvas.getSVGDocument().getElementById("rectangles");
        EventTarget t2 = (EventTarget)elt2;
       
        t2.addEventListener("click", new ObjectClick(), false);
    }
   
    public class GlassPaneClick implements EventListener {
        public void handleEvent(Event evt) {
            target.setText("Glasspane event "+((Element)evt.getTarget()).getAttribute("id"));
            target.repaint();
        }
    }
   
    public class ObjectClick implements EventListener {
        public void handleEvent(Event evt) {
            target.setText("Rectangles event "+((Element)evt.getTarget()).getAttribute("id"));
            target.repaint();
        }
    }
}


/**
*
* @author  Andres Toussaint
*/
public class GlassPane extends javax.swing.JFrame {
   
    /** Creates new form NewJFrame */
    public GlassPane() {
        initComponents();
    }
   
    /** 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.
     */
    private void initComponents() {
        svgPanel = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        btnPanel = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        jLabel2 = new javax.swing.JLabel();
        target = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        svgPanel.setMaximumSize(new java.awt.Dimension(400, 400));
        svgPanel.setMinimumSize(new java.awt.Dimension(400, 400));
        svgPanel.setPreferredSize(new java.awt.Dimension(400, 400));
        getContentPane().add(svgPanel, java.awt.BorderLayout.CENTER);

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("SVG Glass pane example");
        getContentPane().add(jLabel1, java.awt.BorderLayout.NORTH);

        btnPanel.setLayout(new javax.swing.BoxLayout(btnPanel, javax.swing.BoxLayout.Y_AXIS));

        jButton1.setText("create SVG");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        btnPanel.add(jButton1);

        jButton2.setText("Add Glasspane");
        jButton2.setEnabled(false);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        btnPanel.add(jButton2);

        jButton3.setText("add listeners");
        jButton3.setEnabled(false);
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        btnPanel.add(jButton3);

        jButton4.setText("reset");
        jButton4.setEnabled(false);
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        btnPanel.add(jButton4);

        jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jSeparator1.setMaximumSize(new java.awt.Dimension(20, 40));
        jSeparator1.setPreferredSize(new java.awt.Dimension(20, 40));
        btnPanel.add(jSeparator1);

        jLabel2.setFont(new java.awt.Font("MS Sans Serif", 1, 12));
        jLabel2.setText("Target:");
        jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnPanel.add(jLabel2);

        target.setFont(new java.awt.Font("Arial Narrow", 0, 10));
        target.setText("none");
        target.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnPanel.add(target);

        getContentPane().add(btnPanel, java.awt.BorderLayout.EAST);

        pack();
    }

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        svgPanel.removeAll();
        jButton4.setEnabled(false);
        jButton1.setEnabled(true);
    }

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        example.registerListeners(target);
        jButton3.setEnabled(false);
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
                example.addGlassPane();
        jButton3.setEnabled(true);
        jButton2.setEnabled(false);
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        example = new SvgGlassPaneExample(svgPanel);
        jButton2.setEnabled(true);
        jButton4.setEnabled(true);
        jButton1.setEnabled(false);
        this.validate();
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GlassPane().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify
    private javax.swing.JPanel btnPanel;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JPanel svgPanel;
    private javax.swing.JLabel target;
    // End of variables declaration
   
    private SvgGlassPaneExample example;
}
TOP

Related Classes of gps.svg.test.GlassPane

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.