## Rendering en Java 2D

El mecanismo de rendering básico es el mismo que en las versiones anteriores del JDK -- el sistema de dibujo controla cuando y como dibuja un programa. Cuando un componente necesita ser mostrado, se llama automáticamente a su método paint o update dentro del contexto Graphics apropiado.

El API 2D de Java presenta java.awt.Graphics2D, un nuevo tipo de objeto Graphics. Graphics2D desciende de la clase Graphics para proporcionar acceso a las caracterísitcas avanzadas de rendering del API 2D de Java.

Para usar las características del API 2D de Java, tenemos que forzar el objeto Graphics paado al método de dibujo de un componente a un objeto Graphics2D.

    public void Paint (Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        ...
    }

### Contexto de Rendering de Graphics2D

> Al conjunto de atributos de estado asociados con un objeto Graphics2D se le conoce como Contexto de Rendering de Graphics2D. Para mostrar texto, formas o imágenes, podemos configurar este contexto y luego llamar a uno de los métodos de rendering de la clase Graphics2D, como draw o fill. Cómo muestra la siguiente figura, el contexto de rendering de Graphics2D contiene varios atributos.

> | El estilo de lápiz que se aplica al exterior de una forma. Este aributo stroke nos permite dibujar líneas con cualquier tamaño de punto y patrón de sombreado y aplicar finalizadores y decoraciones a la línea.
> | El estilo de relleno que se aplica al interior de la forma. Este atributo paint nos permite rellenar formas con cólores sólidos, gradientes o patrones.
> | El estilo de composición se utiliza cuando los objetos dibujados e solapan con objetos existentes.
> | La transformación que se aplica durante el dibujado para convertir el objeto dibujado desde el espacio de usuario a las coordenadas de espacio del dispositivo. También se pueden aplicar otras transformaciones opcionales como la traducción, rotación escalado, recortado, a través de este atributo.
> | El Clip que restringe el dibujado al área dentro de los bordes de la Shape se utiliza para definir el ára de recorte. Se puede usar cualquier Shape para definir un clip.
> | La fuente se usa para convertir cadenas de texto.
> | Punto de Rendering que especifican las preferencias en cuantro a velocidad y calidad. Por ejemplo, podemos especificar si se debería usar antialiasing, si está disponible.

> Para configurar un atributo en el contexto de rendering de Graphics2D, se usan los métodos set Attribute:

> - setStroke
> - setPaint
> - setComposite
> - setTransform
> - setClip
> - setFont
> - setRenderingHints

> Cuando configuramos un atributo, se el pasa al objeto el atributo apropiado. Por ejemplo, para cambiar el atributo paint a un relleno de gradiente azul-gris, deberíamos construir el objeto GradientPaint y luego llamar a setPaint.

>     gp = new GradientPaint(0f,0f,blue,0f,30f,green);
>     g2.setPaint(gp);

> Graphics2D contiene referencias a sus objeto atributos -- no son clonados. Si modificamos un objeto atributo que forma parte del contexto Graphics2D, necesitamos llamar al método set para notificarlo al contexto. La modificación de un atributo de un objeto durante el renderin puede causar comportamientos impredecibles.

### Métodos de rendering de Graphics2D

> Graphics2D proporciona los siguientes métodos generales de dibujado que peuden ser usados para dibujar cualquier primitivo geométrico, texto o imagen:
> - draw--dibuja el exterior de una forma geométrica primitiva usando los atributos stroke y paint.
> - fill--dibuja cualquier forma geométrica primitiva rellenado su interior con el color o patrón especificado por el atributo paint.
> - drawString--dibuja cualquier cadena de texto. El atributo font se usa para convertir la fuente a glyphs que luego son rellandos con el color o patrón especificados por el atributo paint.
> - drawImage--dibuja la imagen especificada.

> Ademñas, Graphics2D soporta los método de rendering de Graphics para formas particulares, como drawOval y fillRect.

Ozito