Package paintmultimedia

Source Code of paintmultimedia.Lienzo

/*
    Copyright(c) 2006 David Armenteros Escabias
   
    This file is part of PaintMultimedia.

    PaintMultimedia is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


package paintmultimedia;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

import java.awt.Dimension;
import Dibujables.Dibujable;
import java.awt.geom.Point2D;
import java.awt.Rectangle;
import Dibujables.GeometriaDibujable.GeometriaDibujable;

/**
* <p>Title: PaintMultimedia</p>
*
* <p>Description: Aplicacion que permite realizar dibujos, mostrar imagenes de
* diferentes formatos y reproducir sonido y video</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author David Armenteros Escabias
* @version 1.0
*/
public class Lienzo extends JPanel {

    private Vector figuras;
    private Dimension tamanoLienzo;

    /**
     *
     */
    public Lienzo() {
        super(true);

        this.figuras = new Vector();
        this.tamanoLienzo = new Dimension(200, 200);
        this.setSize(this.tamanoLienzo);
        this.setPreferredSize(this.tamanoLienzo);
    }

    /**
     *
     * @param anchura
     * @param altura
     */
    public Lienzo(int anchura, int altura) {
        this(anchura, altura, null);
    }

    /**
     *
     * @param v
     */
    public Lienzo(Vector v) {
        //Por defecto creamos un lienzo de 200 por 200
        this(200, 200, v);
    }

    /**
     *
     * @param anchura
     * @param altura
     * @param v
     */
    public Lienzo(int anchura, int altura, Vector v) {
        //Llamamos al constructor del JPanel
        super(true);

        //Creamos un vector vacio si los parametros son incorrectos
        figuras = (v != null) ? v : (new Vector());

        if (anchura > 1 && altura > 1) //Parametros incorrectos
        {
            this.tamanoLienzo = new Dimension(anchura, altura);
        } else {
            this.tamanoLienzo = new Dimension(200, 200);
        }

        this.setBackground(Color.white);
        this.setBorder(BorderFactory.createEtchedBorder());
        this.setPreferredSize(this.tamanoLienzo);
        this.setSize(this.tamanoLienzo);

        this.repaint();
    }

    @Override
    public void paint(Graphics g) {
        //Pintamos el panel
        super.paint(g);

        Dibujable aux;

        for (int i = 0; i < this.figuras.size(); i++) {
            //Dibujamos todos los componentes del lienzo
            aux = (Dibujable) this.figuras.elementAt(i);
            aux.dibujar(g);
        }
    }

    /**
     *
     * @param figura
     * @return
     */
    public boolean addFigura(Dibujable figura) {
        if (figura != null) {
            figuras.addElement(figura);

            //Repintamos el lienzo solo el espacio ocupado por la figura
            if (figura instanceof GeometriaDibujable) {
                this.repaint(((GeometriaDibujable) figura).getLimitesAbsolutos());
            } else {
                this.repaint();
            }

            return true;
        } else {
            return false;
        }
    }

    /**
     *
     * @param posicion
     * @return
     */
    public Dibujable getFigura(int posicion) {
        if (posicion >= 0 && posicion < figuras.size()) {
            return (Dibujable) figuras.elementAt(posicion);
        }

        return null;
    }

    /**
     *
     * @param p
     * @return
     */
    public GeometriaDibujable getFigura(Point2D p) {
        if (p != null) {
            //Recorremos todos las figuras geometricas hasta que encontramos la
            //mas reciente añadida a la que pertenezca el punto p
            for (int i = this.figuras.size() - 1; i >= 0; i--) {
                if (this.figuras.elementAt(i) instanceof GeometriaDibujable) {
                    if (((GeometriaDibujable) this.figuras.elementAt(i)).getLimitesAbsolutos().contains(p)) {
                        return ((GeometriaDibujable) this.figuras.elementAt(i));
                    }
                }
            }
        }

        return null;
    }

    /**
     *
     * @return
     */
    public Dibujable getLastFigura() {
        if (figuras.isEmpty()) {
            return null;
        }

        return (Dibujable) figuras.lastElement();
    }

    /**
     *
     * @return
     */
    public Dibujable getFirstFigura() {
        if (figuras.isEmpty()) {
            return null;
        }

        return (Dibujable) figuras.firstElement();
    }

    /**
     *
     * @param figura
     * @return
     */
    public boolean deleteFigura(Dibujable figura) {
        if (figura != null) {
            if (figuras.removeElement(figura)) {
                //Repintamos el lienzo solo el espacio ocupado por la figura
                if (figura instanceof GeometriaDibujable) {
                    this.repaint(((GeometriaDibujable) figura).getLimitesAbsolutos());
                } else {
                    this.repaint();
                }

                return true;
            }
        }
        return false;
    }

    /**
     *
     * @param posicion
     * @return
     */
    public boolean deleteFigura(int posicion) {
        if (posicion >= 0 && posicion < figuras.size()) {
            //Repintamos el lienzo solo el espacio ocupado por la figura
            if (figuras.elementAt(posicion) instanceof GeometriaDibujable) {
                Rectangle aux = ((GeometriaDibujable) figuras.elementAt(posicion)).getLimitesAbsolutos();
                figuras.removeElementAt(posicion);
                this.repaint(aux);
            } else {
                figuras.removeElementAt(posicion);
                this.repaint();
            }
            return true;
        }
        return false;
    }

    /**
     *
     * @param v
     * @return
     */
    public boolean setFiguras(Vector v) {
        if (v != null) {
            figuras = v;
            this.repaint();

            return true;
        }
        return false;
    }

    /**
     *
     */
    public void BorraLienzo() {
        //Vaciamos el lienzo
        figuras.removeAllElements();
        this.repaint();
    }

    /**
     *
     * @return
     */
    public boolean isVacio() {
        return this.figuras.isEmpty();
    }

    /**
     *
     * @return
     */
    public int getNFiguras() {
        return this.figuras.size();
    }
}

TOP

Related Classes of paintmultimedia.Lienzo

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.