lunes, 12 de septiembre de 2011

Como Programar en Java: Ejercicio 5.1

Aquí esta el ejercicio 5.1 de Como Programar en Java séptima edición.

package com.jlm.ccb.ejercicios.capitulocinco;

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * Clase encargada de pintar 10 circulos concéntricos.
 * Ejercicio 5.1
 * @author LorettoTG
 * @version 1.0
 */
public class CirculosDiez extends JPanel {
    /**
     * Las clases que implementan este interfaz son susceptibles de ser
     * serializadas (es decir, las instancias de estas clases pueden
     * guardarse y leerse en/de disco -o cualquier otro dispositivo de
     * entrada/salida-). Al serializar lo que sucede es que los atributos
     * del objeto se convierten en cadenas de bytes y se guardan en el
     * disco. Para leer un objeto, se leen las cadenas de bytes y se
     * reconstruye el objeto a partir de ellos. Imagina que tienes una
     * aplicación que serializa en disco una serie de objetos al cerrarse
     * y los lee en la siguiente ejecución para mantener los valores que
     * tenían antes. El campo serialVersionUID es el número de versión de
     * la clase. Cuando el objeto es serializado lo primero que hace es
     * escribir el serialVersionUID. Si al leer el objeto se detecta que
     * el valor del serialVersionUID guardado no coincide con el actual se
     * lanza una exception InvalidClassException, de modo que el programador
     * puede tratar la excepción de manera adecuada. Para que este mecanismo
     * funcione bien, el programador debe proveer el campo private static
     * final long serialVersionUID en todas las clases que implementen
     * Serializable y en todas las subclases de ellas. El valor es
     * indiferente, pero debes actualizarlo cada vez que modificas tu  clase
     * añadiendo o quitando atributos.
     */
    private static final long serialVersionUID = 1L;

    private static final int ITERACIONES = 10;

    private static final int LADO_CUADRADO = 20;

    private static final int DESPLAZAMIENTO = 10;
    /**
     * Método encargado de pintar circulos concéntricos
     * a partir del centro del JPanel con radios mayores de
     * 10 pixeles en 10 pixeles.
     * @param g Objeto Graphics encapsula la información de estado
     * necesaria para realizar las operaciones basicas que soporta
     * Java
     */
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        //Obteniendo el ancho
        int ancho = getWidth() / 2;
        //Obteniendo la altura
        int altura = getHeight() / 2;

        //Ciclo para pintar 10 circulos
        for (int i = 0; i < ITERACIONES; i++) {
            //El punto centrico en x menos 5x(i+1) unidades
            //El punto centrico en y menos 5x(i+1) unidades
            //Esto para ir desplazando las esquinas de los
            //rectangulos que conformar el circulo del centro
            //hacia la esquina superior izquierda y el larcho
            //y ancho lo vamos incrementando.
            g.drawOval(ancho - (DESPLAZAMIENTO * (i + 1)),
                    altura - (DESPLAZAMIENTO * (i + 1)),
                    LADO_CUADRADO + i * LADO_CUADRADO,
                    LADO_CUADRADO + i * LADO_CUADRADO);
        }
    }

    /**
     * Punto de entrada a la clase y a la aplicación.
     * @param args matriz de argumentos de cadena.
     */
    public static void main(String[] args) {
        //El operador new es el encargado de crear instancias de
        //una clase, es decir los objetos que tienen las características
        //de la clase. El operador new de Java es capaz de reservar la
        //memoria para un objeto de este tipo sabiendo los atributos que
        //tiene según la definición de la clase.
        CirculosDiez panel = new CirculosDiez();

        //Crea un nuevo objeto JFrame
        JFrame aplicacion = new JFrame();

        //Indicamos que la operacion default para
        //cerrar sera EXIT_ON_CLOSE
        aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Agregando el panel al marco
        aplicacion.add(panel);
        //Establece el tamaño del marco
        aplicacion.setSize(300, 300);
        //Poniendo su propiedad Visible en verdadera
        aplicacion.setVisible(true);
    }
}

No hay comentarios:

Publicar un comentario