SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
2011
Api Java 2D




     Escuela Superior
   Politécnica del Litoral
  Carolina Dávila Llerena
API Java 2D
Java 2D es un API que nos sirve para dibujar gráficos. Podemos utilizar texto, y tiene
las capacidades de manejo de imágenes para los programas de Java, utilizando
extensión del AWT en Java. Cada dibujo en Java 2D puede tratarse como rellenar una
forma usando un pincel y componiendo el resultado en la pantalla.

En este paquete soporta líneas artísticas, imágenes en 2d, texto, marco, rellenos,
gradientes y todo lo necesario para desarrollar interfaces de usuarios, programas de
dibujos y editores de imágenes.

El API 2D de Java proporciona:

    Un modelo uniforme en las pantallas y las impresiones
    Una variedad de conjuntos y figuras geométricas, gráficos primitivos como lo
     son las curvas, rectángulos, eclipse.etc
    Tiene un mecanismo que permite detectar esquinas ya sea de formas,
     imágenes o texto.
    Tiene una variedad extensa de colores y permite una facilidad de manejo.
    Soporta impresiones de documentos de un nivel más complejo.




Renderizado en Java 2D

Java 2d posee un mecanismo de renderizado básico como en las otras versiones del
JDK, este sistema de dibujo controla cuando u como dibuja un programa.

Cuando se necesita mostrar un componente, automáticamente se llama al método
paint o la update que se encuentra dentro de un contexto Graphics apropiado.

El API 2D de Java presenta java.awt.Graphics2D, desciende de la clase Graphics para
proporcionar acceso a las características avanzadas de renderizado del API 2D de Java.

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

A un conjunto de atributos que se asocian con un objeto se lo conoce como Renderizado.

Para poder mostrar texto, forma o imágenes podemos configurar esto llamando a uno de los
métodos de renderizado de la clase Graphics2D, como lo son draw o fill.


               El estilo de lápiz que se aplica al exterior de una forma. Este atributo 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 se 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 Renderizado que especifican las preferencias en cuanto 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 renderizado de Graphics2D, se usan los
métodos set Attribute.

      setStroke
      setPaint
      setComposite
      setTransform
      setClip
      setFont
      setRenderingHints

Cuando configuramos un atributo, se le 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 objetos 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 renderizado puede causar comportamientos
impredecibles.

 Métodos de renderizado de Graphics2D

Graphics2D proporciona los siguientes métodos generales de dibujado que pueden
usarser 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 se rellenan con el color o patrón especificados por el
       atributo paint.
      drawImage--dibuja la imagen especificada.

Además, Graphics2D soporta los métodos de renderizado de Graphics para formas
particulares, como drawOval y fillRect.
Sistema de Coordenadas

El sistema 2D de Java mantiene dos espacios de coordenadas:

       El espacio de usuario es el espacio en que se especifican los gráficos primitivos.
       El espacio de dispositivo es el sistema de coordenadas para un diopositivo de
        salida, como una pantalla, una ventana o una impresora.

El espacio de usuario es un sistema de coordenadas lógicas independiente del
dispositivo: el espacio de coordenadas que usan nuestros programas. Todos los
geométricos pasados a las rutinas Java 2D de renderizado se especifican en
coordenadas de espacio de usuario.

Cuando se utiliza la transformación por defecto desde el espacio de usuario al espacio
de dispositivo, el origen del espacio de usuario es la esquina superior izquierda del
área de dibujo del componente. La coordenada X se incrementa hacia la derecha, y la
coordenada y hacia abajo.

El espacio de dispositivo es un sistema de coordenadas dependiente del dispositivo
que varía de acuerdo a la fuente del dispositivo. Aunque el sistema de coordenadas
para una ventana o una pantalla podría ser muy distinto que para una impresora, estas
diferencias son invisibles para los programas Java. Las conversiones necesarias entre el
espacio de usuario y el espacio de dispositivo se realizan automáticamente durante el
dibujado.

Conceptos básicos

Estos objetos son parte necesaria de cada operación de dibujo Java 2D.

Formas
Java 2D tiene varias formas que pueden ser utilizadas como rectángulos, cuadrados, círculos
los cuales se les puede rellenar de color o pintar los filos de la forma.

Las formas están hechas por vectores, si se las amplia o se las reduce no se van a ser afectadas
ya que no son pixeles.
Formas 2D

Las clases del paquete java.awt.geom definen gráficos primitivos comunes, como
puntos, líneas, curvas, arcos, rectángulos y elipses.

Clases en el paquete java.awt.geom

    Arc2D
    Area
    CubicCurve2D
    Dimension2D
    Ellipse2D
    GeneralPath
    Line2D
    Point2D
    QuadCurve2D
    Rectangle2D
    RectangularShape
    RoundRectangle2D

Excepto para Point2D y Dimension2D, cada una de las otras clases geométricas
implementa el interface Shape, que proporciona un conjunto de métodos comunes para
describir e inspeccionar objetos geométricos bi-dimensionales.

Con estas clases podemos crear de forma virtual cualquiere forma geométrica y
dibujarla a través de Graphics2D llamando al método draw o al método fill. Por
ejemplo, las formas geométricas del siguiente applet están definidas usando los
geométricos básicos de Java 2D.




Formas Rectangulares

Los primitivos Rectangle2D, RoundRectangle2D, Arc2D, y Ellipse2D descienden del
RectangularShape, que define métodos para objetos Shape que pueden ser descritos
por una caja rectángular. La geometría de un RectangularShape puede ser extrapolada
desde un rectángulo que encierra completamente el exterior de la Shape.
QuadCurve2D y CubicCurve2D

La clase QuadCurve2D nos permite crear segmentos de curvas cuadráticos. Una curva
cuadrática está definida por dos puntos finales y un punto de control.

La clase CubicCurve2D nos permite crear segmentos de curvas cúbicos. Una curva
cúbica está definida por dos puntos finales y dos puntos de control. Las siguientes
figuras muestran ejemplos de curvas cuadráticas y cúbicas.




Gevth

La clase GeneralPath nos permite crear una curva arbitraria especificando una serie de
posiciones a lo largo de los límites de la forma. Estas posiciones pueden ser conectadas
por segmentos de línea, curvas cuadráticas o curvas cúbicas. La siguiente figura puede
ser creada con 3 segmentos de línea y una curva cúbica.




     Areas

Con la clase Area podemos realizar operaciones boolenas, como uniones, intersecciones
y substracciones, sobre dos objetos Shape cualesquiera. Esta técnica, nos permite crear
rápidamente objetos Shape complejos sin tener que describir cada línea de segmento o
cada curva.
Pinceles
                           Un pincel genera los colores que serán usados para cada píxel de la
                           operación de relleno. El pincel más simple es java.awt.Color, el cual
                           genera el mismo color para todos los píxeles.

                         Pinceles más complicados pueden producir gradientes, imágenes,
                         o cualquier combinación de colores. Rellenar una forma circular
                         usando el color amarillo resulta en un círculo sólido amarillo,
                         mientras rellenar la misma forma circular usando un pincel que
genera una imagen produce un recorte circular de la imagen.




Compuestos
Durante cualquier operación de dibujo, hay una fuente (los píxeles que son producidos por el
pincel) y un destino (los píxeles ya en la pantalla). Normalmente, los píxeles fuente
simplemente sobrescriben los píxeles de destino, pero el compuesto permite modificar este
comportamiento.

El compuesto, dados los píxeles fuente y destino, produce el resultado final que por último
aparece en la pantalla. El compuesto más común es java.awt.AlphaComposite, el cual trata los
píxeles que están siendo dibujados como parcialmente transparentes, para que los píxeles
destino se muestren en algún grado.




Rellenado
Para rellenar una forma, el primer paso es identificar que píxeles caen dentro de la forma.
Estos píxeles serán afectados por la operación de relleno. Los píxeles que están parcialmente
dentro y parcialmente fuera de la forma pueden ser afectados en menor grado si está activado
el Anti-aliasing.

El pincel es requerido para generar un color de cada uno de los píxeles que se van a pintar. En
el caso común del relleno de un color sólido, cada píxel será asignado al mismo color.

El compuesto toma los píxeles generados por el pincel y los combina con los píxeles que ya
están en la pantalla para producir el resultado final.
Texto
Cuando necesitemos mostrar texto, podemos usar uno de los componentes orientados a texto,
como los componentes Como usar Labels o Usar Componentes de Texto de Swing. Cuando se
utiliza un componente de texto, mucho del trabajo lo hacen por nosotros--por ejemplo, los
objetos JTextComponent proporcionan soporte interno para chequeo de pulsaciones y para
mostrar texto internacional.

Si queremos mostrar una cadena de texto estática, podemos dibujarla directamente a través
de Graphics2D usando el método drawString. Para especificar la fuente, podemos usar el
método setFont de Graphics2D.

Si queremos implementar nuestras propias rutinas de edición de texto o necesitamos más
control sobre la distribucción del texto que la que proporcionan los componentes de texto,
podemos usar las clases del paquete java.awt.font.




Fuentes
Las formas que una fuente usa para representar los caracteres de una cadena son llamadas
glyphs. Un caracter particular o una combinación de caracteres podría ser representada como
uno o más glyphs. Por ejemplo, á podría ser representado por dos glyphs, mientras que la
ligadura fi podría ser representada por un sólo glyph.
Cuando se utiliza el API 2D de Java, se especifican las fuentes usando un ejemplar de Font.
Podemos determinar las fuentes disponibles en el sistema llamando al método estático
GraphicsEnvironment.getLocalGraphicsEnvironment y preguntando al GraphicsEnvironment
devuelto. El método getAllFonts devuelve un array que contiene ejemplares Font para todas
las fuentes disponibles en el sistema; getAvailableFontFamilyNames devuelve una lista de las
familias de fuentes disponibles.

Objetos Avanzados

Estos objetos pueden ser entendidos en relación con los objetos más simples escritos antes.

Transformación
Cada operación Java 2D es sujeto a transformación, para que las formas pueden ser
traducidas, rotadas, y escaladas cuando son dibujadas. La transformación activa es a menudo
la transformación identidad, la cual no hace nada.

Rellenar usando una transformación puede verse como simplemente crear una nueva forma
transformada y entonces rellenar esa forma.

Movimiento
Además de la operación rellenar, Java 2D suministra una operación dibujar. Mientras rellenar
dibuja el interior de una forma, dibujar dibuja su contorno. El contorno puede ser tan simple
como una línea fina, o tan complicado como una línea con bordes redondeados.




El objeto responsable de generar el exterior es el movimiento. Dada una forma de entrada, el
movimiento produce una nueva forma que representa su exterior. Por ejemplo, un segmento
de línea infinitamente fino (sin interior) no puede ser movido a un rectángulo de ancho de un
píxel.

Una operación dibujar puede por lo tanto ser descrito como crear un nuevo, objeto movido y
entonces rellenar ese objeto.




Imágenes
El API 2D de Java implementa un nuevo modelo de imagen que soporta la manipulación de
imágenes de resolución fija almacenadas en memoria. Una nueva clase Image en el paquete
java.awt.image, puede usar BufferedImage, para manipular datos de una imagen recuperados
desde un fichero o una URL.




Por ejemplo, se puede usar un BufferedImage para implementar doble buffer -- los elementos
gráficos son dibujados fuera de la pantalla en el BufferedImage y luego son copiados a la
pantalla a través de llamadas al método drawImage de Graphics2D.

Las clases BufferedImage y BufferedImageOp también permiten realizar una gran variedad de
operaciones de filtrado de imágenes como blur. El modelo de imagen productor/consumidor
proporcionado en las versiones anteriores del JDK sigue siendo soportado por razones de
compatibilidad.

Impresión
Todos los gráficos del AWT y de Java 2D, incluidos los gráficos compuestos y las imágenes,
pueden ser dibujadas en una impresora usando el API de Java 2D. Este API proporciona
características de composición de documentos que nos permite realizar dichas operaciones
como cambiar el orden de impresión de las páginas.

Dibujar en la impresora es como dibujar en la pantalla. El sistema de impresión controla
cuando se dibujan las páginas, como lo hace el sistema gráfico de la pantalla cuando un
componente se dibuja en la pantalla.

Nuestra aplicación proporciona al sistema de impresión la información sobre el documento a
imprimir, y el sistema de impresión determina cuando necesita dibujar cada página. Cuando
las páginas necesitan ser dibujadas, el sistema de impresión llama al método print de la
aplicación con el contexto Graphics apropiado. Para usar las características del API 2D de Java
en la impresión, debemos forzar el objeto Graphics a un objeto Graphics2D, igual que se hace
cuando se dibuja en la pantalla.
Mostrar Gráficos con Graphics2D
Nos muestra cómo usar Graphics2D para mostrar gráficos con líneas exteriores, estilos de
relleno, transformación de gráficos mientras son dibujados, con restricción de dibujo en un
área particular y generalmente controla la forma y aspecto de los gráficos.

      Punteado y Relleno de Gráficos Primitivos
      Quad
      Cubic
      Dibujar formas arbitrarias
      Odd_Shape
      Definir Estilos de línea divertidos y Patrones de relleno.
      Estilos de Línea
      Patrón de Relleno

Punteado y Relleno de Gráficos Primitivos
Cambiando el punteado y los atributos de dibujo en el contexto de Graphics2D, antes del
dibujo, podemos fácilmente aplicar estilos divertidos de líneas y patrones de relleno para
gráficos primitivos. Por ejemplo, podemos dibujar una línea punteada creando el objeto Stroke
apropiado y llamando a setStroke para añadirlo al contexto Graphics2D antes de dibujar la
línea. De forma similar, podemos aplicar un relleno de gradiente a un Shape creando un objeto
GradientPaint y añadiendo al contexto Graphics2D llamando a setPaint antes de dibujar la
Shape.




                             GradientePaint                Stroke

Formas geométricas usando los métodos Graphics2D draw y fill.
Estilos de Línea
Los estilos de línea están definidos por el atributo stroke en el contexto Graphics2D. Para
seleccionar el atributo stroke podemos crear un objeto BasicStroke y pasarlo dentro del
método Graphics2D setStroke.

Un objeto BasicStroke contiene información sobre la anchura de la línea, estilo de uniones,
estilos finales, y estilo de punteado. Esta información se usa cuando se dibuja un Shape con el
método draw.

BasicStroke soporta tres estilos de unión:


                                    JOIN_BEVEL


                                    JOIN_MITER


                                    JOIN_ROUND

El estilo de finales es la decoración que se aplica cuando un segmento de línea termina.
BasicStroke soporta tres estilos de finalización:

                                      CAP_BUTT

                                    CAP_ROUND

                                   CAP_SQUARE

Patrón de Relleno
Los patrones de rellenos están definidos por el atributo paint en el contexto Graphics2D. Para
seleccionar el atributo paint, se crea un ejemplar de un objeto que implemente el interface
Paint y se pasa dentro del método Graphics2D setPaint.

Tres clases implementan el interface Paint: Color, GradientPaint, y TexturePaint, GradientPaint
y TexturePaint son nuevas en el JDK 1.2.
El patrón para una TexturePaint esta definido por un BufferedImage. Para crear un
TexturePaint, se especifica una imagen que contiene el patrón y un rectángulo que se usa para
replicar y anclar el patrón.




                                   StrokeAndFill
El applet StrokeAndFill permite al usuario seleccionar un gráfico primitivo, un estilo de línea,
un estilo de dibujo y o bien puntear el exterior del objeto, rellenarlo con el dibujo
seleccionado, o puntear el objeto en blanco y rellenar el dibujo con el dibujo seleccionado.




Los primitivos son inicializados e introducidos en un array de objetos Shape. El siguiente código
crea un Rectangle y un Ellipse2D.Double y los introduce en el array shapes.


             Transformar Formas, Texto e Imágenes
Podemos modificar el atributo transform en el contexto Graphics2D para mover, rotar, escalar
y modificar gráficos primitivos mientras son dibujados. El atributo transform está definido por
un ejemplar de AffineTransform.

Graphics2D proporciona varios métodos para cambiar el atributo transform. Podemos
construir un nuevo AffineTransform y cambiar el atributo transform de Graphics2D llamando al
método setTransform.

AffineTransform define los siguientes métodos para hacer más sencilla la construcción de
nuevas transformaciones:

                                        getRotateInstance
                                        getScaleInstance
                                        getShearInstance
   getTranslateInstance

De forma alternativa podemos usar uno de los métodos de transformación de Graphics2D para
modificar la transformación actual. Cuando se llama a uno de esos métodos de conveniencia,
la transformación resultante se concatena con la transformación actual y es aplicada durante
el dibujado.

       rotate--para especificar un ángulo de rotación en radianes.
       scale--para especificar un factor de escala en direcciones x e y.
       shear--para especificar un factor de compartición en direcciones x e y
       translate--para especificar un desplazamiento de movimiento en direcciones x e y




Cuando se elige una opción de transformación, se modifica un ejemplar de AffineTransform y
se concatena con una transformación de movimiento que mueve la Shape hacia el centro de la
ventana. La transformación resultante se pasa al método setTransform para seleccionar el
atributo transform de Graphics2D


                      Recortar la Región de Dibujo
Cualquier Shape puede usarse como un path de recortado que restringe las porciones del área
de dibujo que serán renderizadas. El path de recortado forma parte del contexto Graphics2D;
para seleccionar el atributo clip, se llama a Graphics2D.setClip y se pasa a la Shape que define
el path de recortado que queramos usar. Podemos reducir el path de recortado llamando al
método clip y pasándolo en otra Shape; el atributo clip se configura a la intersección entre el
clip actual y el Shape especificado.

ClipImage

un path de recortado para revelar diferentes porciones de una imagen:
Starry

Un área de recortado también puede crearse desde una cadena de texto existente. El
siguiente ejemplo crea un TextLayout con la cadena The Starry Night. Luego, obtiene
una línea exterior del TextLayout. El método TextLayout.getOutline devuelve un objeto
Shape y un Rectangle creado a partir de los límites del objeto Shape. Los límites
contienen todos los pixels que layout puede dibujar. El color en el contexto gráfico se
selecciona a azul y se dibuja la figura exterior de la forma, como ilustran la siguiente
imagen y el fragmento de código.




Componer Gráficos
La clase AlphaComposite encapsula varios estilos de composición, que determinan
cómo se dibujan los objetos solapados. Un AlphaComposite también puede tener un
valor alpha que especifica el grado de transparencia: alpha = 1.0 es totalmente opaco,
alpha = 0.0 es totalmente transparente. AlphaComposite soporta la mayoria de los
estandares de composición como se muestra en la siguiente tabla.

Source-over (SRC_OVER)        Si los pixels del objeto que está siendo renderizado (la
                              fuente) tienen la misma posición que los pixels
                              renderizados préviamente (el destino), los pixels de la
                              fuente se renderizan sobre los pixels del destino.

Source-in (SRC_IN)            Si los pixels de la fuente y el destino se solapan, sólo se
                              renderizarán los pixels que haya en el área solapada.




Source-out (SRC_OUT)          Si los pixels de la fuente y el destino se solapan, sólo se
                              renderizarán los pixels que haya fuera del área solapada. Los
                              pixels que haya en el área solapada se borrarán.




Destination-over              Si los pixels de la fuente y del destino se solapan, sólo se
(DST_OVER)                    renderizarán los pixels de la fuente que haya fuera del área
solapada. Los pixels que haya en el área solapada no se
                               cambian.




Destination-in (DST_IN)        Si los pixels de la fuente y del destino se solapan, el alpha de
                               la fuente se aplica a los pixels del área solapada del destino. Si
                               el alpha = 1.0, los pixels del área solapada no cambian; si
                               alpha es 0.0 los pixels del área solapada se borrarán.

Destination-out (DST_OUT) Si los pixels de la fuente y del destino se solapan, se aplica el
                          alpha de la fuente a los pixels del área solapada del destino. Si
                          el alpha = 1.0, los pixels del área solapada no cambian; si
                          alpha es 0.0 los pixels del área solapada se borrarán.

Clear (CLEAR)                  Si los pixels de la fuente y del destino se solapan, los pixels del
                               área solapada se borrarán.




Composite

Este programa ilustra los efectos de varias combinaciones de estilos de composición y
valores de alpha.
Controlar la Calidad del Dibujo
Podemos usar el atributo 'rendering hint' de Graphics2D para especificar si queremos
que los objetos sean dibujados tan rápido como sea posible o si preferimos que se
dibujen con la mayor calidad posible.

Para seleccionar o configurar el atributo 'rendering hint', Graphics2D podemos
construir    un     objeto      RenderingHints        y      pasarlo     dentro   de
Graphics2D.setRenderingHints. Si sólo queremos seleccionar un hint, podemos llamar
a Graphics2D. setRenderingHint y especificar la pareja clave-valor para el hint que
queremos seleccionar. (Estas parejas están definidas en la clase RenderingHints.)

RenderingHints soporta los siguientes tipos de hints.

      Alpha interpolation--por defecto, calidad, o velocidad.
      Antialiasing--por defecto, on, u off
      Color rendering-por defecto, calidad, o velocidad
      Dithering--por defecto, activado o desactivado
      Fractional metrics--por defecto, on u off
      Interpolation--vecino más cercano, bilinear, o bicúbico
      Rendering--por defecto, calidad, o velocidad
      Text antialiasing--por defecto, on u off.




Construir Formas Complejas desde Geométricos
Primitivos
Construir un área geométrica (CAG) es el proceso de crear una nueva forma
geométrica realizando operaciones con las ya existentes. En el API Java 2D un tipo
especial de Shape llamado Area soporta operaciones booleanas. Podemos construir un
Area desde cualquier Shape .

Area soporta la siguientes operaciones booleanas:




                             Unión                               Subtracción
Intersección                         Or-Exclusivo (XOR)




Áreas
En este ejemplo, los objetos Area construyen una forma de pera partiendo de varias
elipses.




Soportar Interacción con el Usuario
Para permitir que el usuario interactúe con los graficos que hemos dibujado,
necesitamos poder determinar cuando el usuario pulsa sobre uno de ellos. El método
hit de Graphics2D proporciona una forma para determinar fácilmente si ha ocurrido
una pulsación de ratón sobre una Shape particular. De forma alternativa podemos
obtener la posición del click de ratón y llamar a contains sobre la Shape para
determinar si el click ocurrió dentro de los límites de la Shape.

ShapeMover
Este applet permite al usuario arrastrar la Shape por la ventana del applet. La Shape se
redibuja en cada nueva posición del ratón para proporcionar información al usuario mientras
la arrastra.
Dibujar Múltiples Líneas de Texto
Si tenemos un párrafo de texto con estilo que queremos que quepa dentro de una
anchura especifica, podemos usar LineBreakMeasurer, que permite que el texto con
estilo se rompa en líneas que caben dentro de un espacio visual. Como hemos aprendido
en Mostrar Gráficos con Graphics2D, un objeto TextLayout representa datos de
caracteres con estilo, que no se pueden cambiar, pero también permite acceder a la
información de distribución. Los métodos getAscent y getDescent de TextLayout
devuelven información sobre la fuente usada para posicionar las líneas en el
componente. El texto se almacena como un AttributedCharacterIterator para que los
atributos de fuente y tamaño de punto puedan ser almacenados con el texto.


     Ejemplo: LineBreakSample

El siguiente applet posiciona un párrafo de texto con estilo dentro de un componente,
usando LineBreakMeasurer, TextLayout y AttributedCharacterIterator.
Impresión en Java
Java 2D controla en forma general el proceso de impresión, al igual que también
controla cómo y cuándo pueden dibujar los programas, nuestras aplicaciones
proporcionan información sobre el documento a imprimir, y el sistema de impresión
determina cuando necesita renderizar cada página.

Este modelo de impresión permite soportar una amplio rango de impresoras y de
sistemas. Incluso permite al usuario imprimir en una impresora de bitmaps desde un
ordenador que no tiene suficiente memoria o espacio en disco para contener el mapa de
bits de una página completa. En esta situación el sistema de impresión le pedirá a nuesta
aplicación que renderize la página de forma repetida para que pueda ser imprimida
como una serie de pequeñas imágenes.

Para soportar impresión, una apliación necesita realizar dos tareas.

       Job control--manejar el trabajo de impresión
       Imaging--renderizar las páginas a imprimir


       Job Control

Aunque el sistema controla todo el proceso de impresión, nuestra aplicación tiene que
obtener la oportunidad de configurar un PrinterJob. El PrinterJob , el punto clave del
control del proceso de impresión, almacena las propiedades del trabajo de impresión,
controla la visión de los diálogos de impresión y se usa para inicializar la impresión.

Para dirigir el PrinterJob a través del proceso de impresión, nuestra aplicación necesita

   1. Obtener un PrinterJob llamando a PrinterJob.getPrinterJob
   2. Decirle al PrinterJob dónde está el código de dibujo llamando a setPrintable o
      setPageable
   3. Si se desea, mostrar los diálogos de configuración de página e impresión
      llamando a pageDialog y printDialog

Iniciar la impresión llamando a print

Más contenido relacionado

La actualidad más candente

Displaying information within a window.68
Displaying information within a window.68Displaying information within a window.68
Displaying information within a window.68myrajendra
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de SoftwareRene Guaman-Quinche
 
Diagramas de paquetes
Diagramas de paquetesDiagramas de paquetes
Diagramas de paquetesMoises Cruz
 
Ellipses drawing algo.
Ellipses drawing algo.Ellipses drawing algo.
Ellipses drawing algo.Mohd Arif
 
Programación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenProgramación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenAngel Vázquez Patiño
 
illumination model in Computer Graphics by irru pychukar
illumination model in Computer Graphics by irru pychukarillumination model in Computer Graphics by irru pychukar
illumination model in Computer Graphics by irru pychukarsyedArr
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteJosé Antonio Sandoval Acosta
 
UML. un analisis comparativo para la diagramación de software
UML.  un analisis comparativo para la diagramación de softwareUML.  un analisis comparativo para la diagramación de software
UML. un analisis comparativo para la diagramación de softwareYaskelly Yedra
 
Generación de documentación con star UML
Generación de documentación con star UMLGeneración de documentación con star UML
Generación de documentación con star UMLSoftware Guru
 
2D Transformation in Computer Graphics
2D Transformation in Computer Graphics2D Transformation in Computer Graphics
2D Transformation in Computer GraphicsA. S. M. Shafi
 
El modelo relacional
El modelo relacionalEl modelo relacional
El modelo relacionalLuis Jherry
 
Diagramas de clase.pptx
Diagramas de clase.pptxDiagramas de clase.pptx
Diagramas de clase.pptxCAMILORUALES1
 
Parallel projection
Parallel projectionParallel projection
Parallel projectionPrince Shahu
 

La actualidad más candente (20)

Arquitectura pizarra
Arquitectura pizarraArquitectura pizarra
Arquitectura pizarra
 
Displaying information within a window.68
Displaying information within a window.68Displaying information within a window.68
Displaying information within a window.68
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
 
Diagramas de paquetes
Diagramas de paquetesDiagramas de paquetes
Diagramas de paquetes
 
MetodologíAs Y Ciclos De Vida
MetodologíAs Y Ciclos De VidaMetodologíAs Y Ciclos De Vida
MetodologíAs Y Ciclos De Vida
 
Grafos
GrafosGrafos
Grafos
 
Ellipses drawing algo.
Ellipses drawing algo.Ellipses drawing algo.
Ellipses drawing algo.
 
Programación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenProgramación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origen
 
illumination model in Computer Graphics by irru pychukar
illumination model in Computer Graphics by irru pychukarillumination model in Computer Graphics by irru pychukar
illumination model in Computer Graphics by irru pychukar
 
Types of UML diagrams
Types of UML diagramsTypes of UML diagrams
Types of UML diagrams
 
Clase 2
Clase 2Clase 2
Clase 2
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Relaciones y Grafos
Relaciones y GrafosRelaciones y Grafos
Relaciones y Grafos
 
UML. un analisis comparativo para la diagramación de software
UML.  un analisis comparativo para la diagramación de softwareUML.  un analisis comparativo para la diagramación de software
UML. un analisis comparativo para la diagramación de software
 
Generación de documentación con star UML
Generación de documentación con star UMLGeneración de documentación con star UML
Generación de documentación con star UML
 
2D Transformation in Computer Graphics
2D Transformation in Computer Graphics2D Transformation in Computer Graphics
2D Transformation in Computer Graphics
 
El modelo relacional
El modelo relacionalEl modelo relacional
El modelo relacional
 
Diagramas de clase.pptx
Diagramas de clase.pptxDiagramas de clase.pptx
Diagramas de clase.pptx
 
Parallel projection
Parallel projectionParallel projection
Parallel projection
 
Lenguaje Acme
Lenguaje AcmeLenguaje Acme
Lenguaje Acme
 

Destacado

Destacado (8)

Java 2d
Java 2dJava 2d
Java 2d
 
Tema 14 imágenes en java por gio
Tema 14   imágenes en java por gioTema 14   imágenes en java por gio
Tema 14 imágenes en java por gio
 
Java blackberry
Java blackberryJava blackberry
Java blackberry
 
Ediciones Windows7 y Windows Server 2008
Ediciones Windows7 y Windows Server 2008Ediciones Windows7 y Windows Server 2008
Ediciones Windows7 y Windows Server 2008
 
VECTORES EN R2
VECTORES EN R2VECTORES EN R2
VECTORES EN R2
 
Vectores r2 y r3
Vectores r2 y r3Vectores r2 y r3
Vectores r2 y r3
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Vectores en R2 - 2
Vectores en R2 - 2Vectores en R2 - 2
Vectores en R2 - 2
 

Similar a ApiJava2D

Similar a ApiJava2D (20)

Java 2 d
Java 2 dJava 2 d
Java 2 d
 
Tema 13 gráficas en java por gio
Tema 13   gráficas en java por gioTema 13   gráficas en java por gio
Tema 13 gráficas en java por gio
 
Autocad
AutocadAutocad
Autocad
 
379051490 informe-1-cad-cam
379051490 informe-1-cad-cam379051490 informe-1-cad-cam
379051490 informe-1-cad-cam
 
UNIDAD I.pptx
UNIDAD I.pptxUNIDAD I.pptx
UNIDAD I.pptx
 
Guía autocad
Guía autocadGuía autocad
Guía autocad
 
Ensayo critico (pedro rodriguez c.i. 16388340)
Ensayo critico (pedro rodriguez c.i. 16388340)Ensayo critico (pedro rodriguez c.i. 16388340)
Ensayo critico (pedro rodriguez c.i. 16388340)
 
Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGL
 
Primitivas
PrimitivasPrimitivas
Primitivas
 
Cursodeqcad 140113040152-phpapp01
Cursodeqcad 140113040152-phpapp01Cursodeqcad 140113040152-phpapp01
Cursodeqcad 140113040152-phpapp01
 
Guia AutoCAD_2015-2d_muestra
Guia AutoCAD_2015-2d_muestraGuia AutoCAD_2015-2d_muestra
Guia AutoCAD_2015-2d_muestra
 
parte 4 manual 2022.pdf
parte 4 manual 2022.pdfparte 4 manual 2022.pdf
parte 4 manual 2022.pdf
 
Introduccion a graficos mediante JAVA 2D
Introduccion a graficos mediante JAVA 2DIntroduccion a graficos mediante JAVA 2D
Introduccion a graficos mediante JAVA 2D
 
Cesar encalada
Cesar encaladaCesar encalada
Cesar encalada
 
abajo practicoTrabajo de investigación autocad
abajo practicoTrabajo de investigación autocadabajo practicoTrabajo de investigación autocad
abajo practicoTrabajo de investigación autocad
 
Práctica de word
Práctica de wordPráctica de word
Práctica de word
 
Práctica de word
Práctica de wordPráctica de word
Práctica de word
 
Práctica de word
Práctica de wordPráctica de word
Práctica de word
 
Grafos Ponderados
Grafos PonderadosGrafos Ponderados
Grafos Ponderados
 
Introduccion a java3 d
Introduccion a java3 dIntroduccion a java3 d
Introduccion a java3 d
 

Más de ESPOL

Control de Acceso a Sistemas Operativos
Control de Acceso a Sistemas OperativosControl de Acceso a Sistemas Operativos
Control de Acceso a Sistemas OperativosESPOL
 
Widgets de Adove Captive
Widgets de Adove CaptiveWidgets de Adove Captive
Widgets de Adove CaptiveESPOL
 
Distribuciones de Linux
Distribuciones de LinuxDistribuciones de Linux
Distribuciones de LinuxESPOL
 
Contadores de Eventos(Problema del productor y consumidor)
Contadores de Eventos(Problema del productor y consumidor)Contadores de Eventos(Problema del productor y consumidor)
Contadores de Eventos(Problema del productor y consumidor)ESPOL
 
Kanon wakeshima
Kanon wakeshimaKanon wakeshima
Kanon wakeshimaESPOL
 
Software Multimedia
Software MultimediaSoftware Multimedia
Software MultimediaESPOL
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASEESPOL
 
Base de Datos
Base de DatosBase de Datos
Base de DatosESPOL
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacionESPOL
 
Utilitarios
UtilitariosUtilitarios
UtilitariosESPOL
 
Sistamas Operativos parte1
Sistamas Operativos parte1Sistamas Operativos parte1
Sistamas Operativos parte1ESPOL
 
Sistemas operativos parte2
Sistemas  operativos parte2Sistemas  operativos parte2
Sistemas operativos parte2ESPOL
 
Dispositivos de salida
Dispositivos de salidaDispositivos de salida
Dispositivos de salidaESPOL
 
Dispositivos de entrada
Dispositivos de entradaDispositivos de entrada
Dispositivos de entradaESPOL
 
C Saucedo
C SaucedoC Saucedo
C SaucedoESPOL
 

Más de ESPOL (15)

Control de Acceso a Sistemas Operativos
Control de Acceso a Sistemas OperativosControl de Acceso a Sistemas Operativos
Control de Acceso a Sistemas Operativos
 
Widgets de Adove Captive
Widgets de Adove CaptiveWidgets de Adove Captive
Widgets de Adove Captive
 
Distribuciones de Linux
Distribuciones de LinuxDistribuciones de Linux
Distribuciones de Linux
 
Contadores de Eventos(Problema del productor y consumidor)
Contadores de Eventos(Problema del productor y consumidor)Contadores de Eventos(Problema del productor y consumidor)
Contadores de Eventos(Problema del productor y consumidor)
 
Kanon wakeshima
Kanon wakeshimaKanon wakeshima
Kanon wakeshima
 
Software Multimedia
Software MultimediaSoftware Multimedia
Software Multimedia
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASE
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Utilitarios
UtilitariosUtilitarios
Utilitarios
 
Sistamas Operativos parte1
Sistamas Operativos parte1Sistamas Operativos parte1
Sistamas Operativos parte1
 
Sistemas operativos parte2
Sistemas  operativos parte2Sistemas  operativos parte2
Sistemas operativos parte2
 
Dispositivos de salida
Dispositivos de salidaDispositivos de salida
Dispositivos de salida
 
Dispositivos de entrada
Dispositivos de entradaDispositivos de entrada
Dispositivos de entrada
 
C Saucedo
C SaucedoC Saucedo
C Saucedo
 

Último

Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
CLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdfCLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdfJonathanCovena1
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 

Último (20)

Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
CLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdfCLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdf
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 

ApiJava2D

  • 1. 2011 Api Java 2D Escuela Superior Politécnica del Litoral Carolina Dávila Llerena
  • 2. API Java 2D Java 2D es un API que nos sirve para dibujar gráficos. Podemos utilizar texto, y tiene las capacidades de manejo de imágenes para los programas de Java, utilizando extensión del AWT en Java. Cada dibujo en Java 2D puede tratarse como rellenar una forma usando un pincel y componiendo el resultado en la pantalla. En este paquete soporta líneas artísticas, imágenes en 2d, texto, marco, rellenos, gradientes y todo lo necesario para desarrollar interfaces de usuarios, programas de dibujos y editores de imágenes. El API 2D de Java proporciona:  Un modelo uniforme en las pantallas y las impresiones  Una variedad de conjuntos y figuras geométricas, gráficos primitivos como lo son las curvas, rectángulos, eclipse.etc  Tiene un mecanismo que permite detectar esquinas ya sea de formas, imágenes o texto.  Tiene una variedad extensa de colores y permite una facilidad de manejo.  Soporta impresiones de documentos de un nivel más complejo. Renderizado en Java 2D Java 2d posee un mecanismo de renderizado básico como en las otras versiones del JDK, este sistema de dibujo controla cuando u como dibuja un programa. Cuando se necesita mostrar un componente, automáticamente se llama al método paint o la update que se encuentra dentro de un contexto Graphics apropiado. El API 2D de Java presenta java.awt.Graphics2D, desciende de la clase Graphics para proporcionar acceso a las características avanzadas de renderizado del API 2D de Java. Para usar las características del API 2D de Java, tenemos que forzar el objeto Graphics pasado al método de dibujo de un componente a un objeto Graphics2D.
  • 3. Contexto de Renderizado de Graphics2D A un conjunto de atributos que se asocian con un objeto se lo conoce como Renderizado. Para poder mostrar texto, forma o imágenes podemos configurar esto llamando a uno de los métodos de renderizado de la clase Graphics2D, como lo son draw o fill. El estilo de lápiz que se aplica al exterior de una forma. Este atributo 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 se 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.
  • 4. Punto de Renderizado que especifican las preferencias en cuanto 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 renderizado de Graphics2D, se usan los métodos set Attribute.  setStroke  setPaint  setComposite  setTransform  setClip  setFont  setRenderingHints Cuando configuramos un atributo, se le 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 objetos 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 renderizado puede causar comportamientos impredecibles. Métodos de renderizado de Graphics2D Graphics2D proporciona los siguientes métodos generales de dibujado que pueden usarser 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 se rellenan con el color o patrón especificados por el atributo paint.  drawImage--dibuja la imagen especificada. Además, Graphics2D soporta los métodos de renderizado de Graphics para formas particulares, como drawOval y fillRect.
  • 5. Sistema de Coordenadas El sistema 2D de Java mantiene dos espacios de coordenadas:  El espacio de usuario es el espacio en que se especifican los gráficos primitivos.  El espacio de dispositivo es el sistema de coordenadas para un diopositivo de salida, como una pantalla, una ventana o una impresora. El espacio de usuario es un sistema de coordenadas lógicas independiente del dispositivo: el espacio de coordenadas que usan nuestros programas. Todos los geométricos pasados a las rutinas Java 2D de renderizado se especifican en coordenadas de espacio de usuario. Cuando se utiliza la transformación por defecto desde el espacio de usuario al espacio de dispositivo, el origen del espacio de usuario es la esquina superior izquierda del área de dibujo del componente. La coordenada X se incrementa hacia la derecha, y la coordenada y hacia abajo. El espacio de dispositivo es un sistema de coordenadas dependiente del dispositivo que varía de acuerdo a la fuente del dispositivo. Aunque el sistema de coordenadas para una ventana o una pantalla podría ser muy distinto que para una impresora, estas diferencias son invisibles para los programas Java. Las conversiones necesarias entre el espacio de usuario y el espacio de dispositivo se realizan automáticamente durante el dibujado. Conceptos básicos Estos objetos son parte necesaria de cada operación de dibujo Java 2D. Formas Java 2D tiene varias formas que pueden ser utilizadas como rectángulos, cuadrados, círculos los cuales se les puede rellenar de color o pintar los filos de la forma. Las formas están hechas por vectores, si se las amplia o se las reduce no se van a ser afectadas ya que no son pixeles.
  • 6. Formas 2D Las clases del paquete java.awt.geom definen gráficos primitivos comunes, como puntos, líneas, curvas, arcos, rectángulos y elipses. Clases en el paquete java.awt.geom  Arc2D  Area  CubicCurve2D  Dimension2D  Ellipse2D  GeneralPath  Line2D  Point2D  QuadCurve2D  Rectangle2D  RectangularShape  RoundRectangle2D Excepto para Point2D y Dimension2D, cada una de las otras clases geométricas implementa el interface Shape, que proporciona un conjunto de métodos comunes para describir e inspeccionar objetos geométricos bi-dimensionales. Con estas clases podemos crear de forma virtual cualquiere forma geométrica y dibujarla a través de Graphics2D llamando al método draw o al método fill. Por ejemplo, las formas geométricas del siguiente applet están definidas usando los geométricos básicos de Java 2D. Formas Rectangulares Los primitivos Rectangle2D, RoundRectangle2D, Arc2D, y Ellipse2D descienden del RectangularShape, que define métodos para objetos Shape que pueden ser descritos por una caja rectángular. La geometría de un RectangularShape puede ser extrapolada desde un rectángulo que encierra completamente el exterior de la Shape.
  • 7. QuadCurve2D y CubicCurve2D La clase QuadCurve2D nos permite crear segmentos de curvas cuadráticos. Una curva cuadrática está definida por dos puntos finales y un punto de control. La clase CubicCurve2D nos permite crear segmentos de curvas cúbicos. Una curva cúbica está definida por dos puntos finales y dos puntos de control. Las siguientes figuras muestran ejemplos de curvas cuadráticas y cúbicas. Gevth La clase GeneralPath nos permite crear una curva arbitraria especificando una serie de posiciones a lo largo de los límites de la forma. Estas posiciones pueden ser conectadas por segmentos de línea, curvas cuadráticas o curvas cúbicas. La siguiente figura puede ser creada con 3 segmentos de línea y una curva cúbica. Areas Con la clase Area podemos realizar operaciones boolenas, como uniones, intersecciones y substracciones, sobre dos objetos Shape cualesquiera. Esta técnica, nos permite crear rápidamente objetos Shape complejos sin tener que describir cada línea de segmento o cada curva.
  • 8. Pinceles Un pincel genera los colores que serán usados para cada píxel de la operación de relleno. El pincel más simple es java.awt.Color, el cual genera el mismo color para todos los píxeles. Pinceles más complicados pueden producir gradientes, imágenes, o cualquier combinación de colores. Rellenar una forma circular usando el color amarillo resulta en un círculo sólido amarillo, mientras rellenar la misma forma circular usando un pincel que genera una imagen produce un recorte circular de la imagen. Compuestos Durante cualquier operación de dibujo, hay una fuente (los píxeles que son producidos por el pincel) y un destino (los píxeles ya en la pantalla). Normalmente, los píxeles fuente simplemente sobrescriben los píxeles de destino, pero el compuesto permite modificar este comportamiento. El compuesto, dados los píxeles fuente y destino, produce el resultado final que por último aparece en la pantalla. El compuesto más común es java.awt.AlphaComposite, el cual trata los píxeles que están siendo dibujados como parcialmente transparentes, para que los píxeles destino se muestren en algún grado. Rellenado Para rellenar una forma, el primer paso es identificar que píxeles caen dentro de la forma. Estos píxeles serán afectados por la operación de relleno. Los píxeles que están parcialmente dentro y parcialmente fuera de la forma pueden ser afectados en menor grado si está activado el Anti-aliasing. El pincel es requerido para generar un color de cada uno de los píxeles que se van a pintar. En el caso común del relleno de un color sólido, cada píxel será asignado al mismo color. El compuesto toma los píxeles generados por el pincel y los combina con los píxeles que ya están en la pantalla para producir el resultado final.
  • 9. Texto Cuando necesitemos mostrar texto, podemos usar uno de los componentes orientados a texto, como los componentes Como usar Labels o Usar Componentes de Texto de Swing. Cuando se utiliza un componente de texto, mucho del trabajo lo hacen por nosotros--por ejemplo, los objetos JTextComponent proporcionan soporte interno para chequeo de pulsaciones y para mostrar texto internacional. Si queremos mostrar una cadena de texto estática, podemos dibujarla directamente a través de Graphics2D usando el método drawString. Para especificar la fuente, podemos usar el método setFont de Graphics2D. Si queremos implementar nuestras propias rutinas de edición de texto o necesitamos más control sobre la distribucción del texto que la que proporcionan los componentes de texto, podemos usar las clases del paquete java.awt.font. Fuentes Las formas que una fuente usa para representar los caracteres de una cadena son llamadas glyphs. Un caracter particular o una combinación de caracteres podría ser representada como uno o más glyphs. Por ejemplo, á podría ser representado por dos glyphs, mientras que la ligadura fi podría ser representada por un sólo glyph.
  • 10. Cuando se utiliza el API 2D de Java, se especifican las fuentes usando un ejemplar de Font. Podemos determinar las fuentes disponibles en el sistema llamando al método estático GraphicsEnvironment.getLocalGraphicsEnvironment y preguntando al GraphicsEnvironment devuelto. El método getAllFonts devuelve un array que contiene ejemplares Font para todas las fuentes disponibles en el sistema; getAvailableFontFamilyNames devuelve una lista de las familias de fuentes disponibles. Objetos Avanzados Estos objetos pueden ser entendidos en relación con los objetos más simples escritos antes. Transformación Cada operación Java 2D es sujeto a transformación, para que las formas pueden ser traducidas, rotadas, y escaladas cuando son dibujadas. La transformación activa es a menudo la transformación identidad, la cual no hace nada. Rellenar usando una transformación puede verse como simplemente crear una nueva forma transformada y entonces rellenar esa forma. Movimiento Además de la operación rellenar, Java 2D suministra una operación dibujar. Mientras rellenar dibuja el interior de una forma, dibujar dibuja su contorno. El contorno puede ser tan simple como una línea fina, o tan complicado como una línea con bordes redondeados. El objeto responsable de generar el exterior es el movimiento. Dada una forma de entrada, el movimiento produce una nueva forma que representa su exterior. Por ejemplo, un segmento de línea infinitamente fino (sin interior) no puede ser movido a un rectángulo de ancho de un píxel. Una operación dibujar puede por lo tanto ser descrito como crear un nuevo, objeto movido y entonces rellenar ese objeto. Imágenes
  • 11. El API 2D de Java implementa un nuevo modelo de imagen que soporta la manipulación de imágenes de resolución fija almacenadas en memoria. Una nueva clase Image en el paquete java.awt.image, puede usar BufferedImage, para manipular datos de una imagen recuperados desde un fichero o una URL. Por ejemplo, se puede usar un BufferedImage para implementar doble buffer -- los elementos gráficos son dibujados fuera de la pantalla en el BufferedImage y luego son copiados a la pantalla a través de llamadas al método drawImage de Graphics2D. Las clases BufferedImage y BufferedImageOp también permiten realizar una gran variedad de operaciones de filtrado de imágenes como blur. El modelo de imagen productor/consumidor proporcionado en las versiones anteriores del JDK sigue siendo soportado por razones de compatibilidad. Impresión Todos los gráficos del AWT y de Java 2D, incluidos los gráficos compuestos y las imágenes, pueden ser dibujadas en una impresora usando el API de Java 2D. Este API proporciona características de composición de documentos que nos permite realizar dichas operaciones como cambiar el orden de impresión de las páginas. Dibujar en la impresora es como dibujar en la pantalla. El sistema de impresión controla cuando se dibujan las páginas, como lo hace el sistema gráfico de la pantalla cuando un componente se dibuja en la pantalla. Nuestra aplicación proporciona al sistema de impresión la información sobre el documento a imprimir, y el sistema de impresión determina cuando necesita dibujar cada página. Cuando las páginas necesitan ser dibujadas, el sistema de impresión llama al método print de la aplicación con el contexto Graphics apropiado. Para usar las características del API 2D de Java en la impresión, debemos forzar el objeto Graphics a un objeto Graphics2D, igual que se hace cuando se dibuja en la pantalla.
  • 12. Mostrar Gráficos con Graphics2D Nos muestra cómo usar Graphics2D para mostrar gráficos con líneas exteriores, estilos de relleno, transformación de gráficos mientras son dibujados, con restricción de dibujo en un área particular y generalmente controla la forma y aspecto de los gráficos.  Punteado y Relleno de Gráficos Primitivos  Quad  Cubic  Dibujar formas arbitrarias  Odd_Shape  Definir Estilos de línea divertidos y Patrones de relleno.  Estilos de Línea  Patrón de Relleno Punteado y Relleno de Gráficos Primitivos Cambiando el punteado y los atributos de dibujo en el contexto de Graphics2D, antes del dibujo, podemos fácilmente aplicar estilos divertidos de líneas y patrones de relleno para gráficos primitivos. Por ejemplo, podemos dibujar una línea punteada creando el objeto Stroke apropiado y llamando a setStroke para añadirlo al contexto Graphics2D antes de dibujar la línea. De forma similar, podemos aplicar un relleno de gradiente a un Shape creando un objeto GradientPaint y añadiendo al contexto Graphics2D llamando a setPaint antes de dibujar la Shape. GradientePaint Stroke Formas geométricas usando los métodos Graphics2D draw y fill.
  • 13. Estilos de Línea Los estilos de línea están definidos por el atributo stroke en el contexto Graphics2D. Para seleccionar el atributo stroke podemos crear un objeto BasicStroke y pasarlo dentro del método Graphics2D setStroke. Un objeto BasicStroke contiene información sobre la anchura de la línea, estilo de uniones, estilos finales, y estilo de punteado. Esta información se usa cuando se dibuja un Shape con el método draw. BasicStroke soporta tres estilos de unión: JOIN_BEVEL JOIN_MITER JOIN_ROUND El estilo de finales es la decoración que se aplica cuando un segmento de línea termina. BasicStroke soporta tres estilos de finalización: CAP_BUTT CAP_ROUND CAP_SQUARE Patrón de Relleno Los patrones de rellenos están definidos por el atributo paint en el contexto Graphics2D. Para seleccionar el atributo paint, se crea un ejemplar de un objeto que implemente el interface Paint y se pasa dentro del método Graphics2D setPaint. Tres clases implementan el interface Paint: Color, GradientPaint, y TexturePaint, GradientPaint y TexturePaint son nuevas en el JDK 1.2.
  • 14. El patrón para una TexturePaint esta definido por un BufferedImage. Para crear un TexturePaint, se especifica una imagen que contiene el patrón y un rectángulo que se usa para replicar y anclar el patrón. StrokeAndFill El applet StrokeAndFill permite al usuario seleccionar un gráfico primitivo, un estilo de línea, un estilo de dibujo y o bien puntear el exterior del objeto, rellenarlo con el dibujo seleccionado, o puntear el objeto en blanco y rellenar el dibujo con el dibujo seleccionado. Los primitivos son inicializados e introducidos en un array de objetos Shape. El siguiente código crea un Rectangle y un Ellipse2D.Double y los introduce en el array shapes. Transformar Formas, Texto e Imágenes Podemos modificar el atributo transform en el contexto Graphics2D para mover, rotar, escalar y modificar gráficos primitivos mientras son dibujados. El atributo transform está definido por un ejemplar de AffineTransform. Graphics2D proporciona varios métodos para cambiar el atributo transform. Podemos construir un nuevo AffineTransform y cambiar el atributo transform de Graphics2D llamando al método setTransform. AffineTransform define los siguientes métodos para hacer más sencilla la construcción de nuevas transformaciones:  getRotateInstance  getScaleInstance  getShearInstance
  • 15. getTranslateInstance De forma alternativa podemos usar uno de los métodos de transformación de Graphics2D para modificar la transformación actual. Cuando se llama a uno de esos métodos de conveniencia, la transformación resultante se concatena con la transformación actual y es aplicada durante el dibujado.  rotate--para especificar un ángulo de rotación en radianes.  scale--para especificar un factor de escala en direcciones x e y.  shear--para especificar un factor de compartición en direcciones x e y  translate--para especificar un desplazamiento de movimiento en direcciones x e y Cuando se elige una opción de transformación, se modifica un ejemplar de AffineTransform y se concatena con una transformación de movimiento que mueve la Shape hacia el centro de la ventana. La transformación resultante se pasa al método setTransform para seleccionar el atributo transform de Graphics2D Recortar la Región de Dibujo Cualquier Shape puede usarse como un path de recortado que restringe las porciones del área de dibujo que serán renderizadas. El path de recortado forma parte del contexto Graphics2D; para seleccionar el atributo clip, se llama a Graphics2D.setClip y se pasa a la Shape que define el path de recortado que queramos usar. Podemos reducir el path de recortado llamando al método clip y pasándolo en otra Shape; el atributo clip se configura a la intersección entre el clip actual y el Shape especificado. ClipImage un path de recortado para revelar diferentes porciones de una imagen:
  • 16. Starry Un área de recortado también puede crearse desde una cadena de texto existente. El siguiente ejemplo crea un TextLayout con la cadena The Starry Night. Luego, obtiene una línea exterior del TextLayout. El método TextLayout.getOutline devuelve un objeto Shape y un Rectangle creado a partir de los límites del objeto Shape. Los límites contienen todos los pixels que layout puede dibujar. El color en el contexto gráfico se selecciona a azul y se dibuja la figura exterior de la forma, como ilustran la siguiente imagen y el fragmento de código. Componer Gráficos La clase AlphaComposite encapsula varios estilos de composición, que determinan cómo se dibujan los objetos solapados. Un AlphaComposite también puede tener un valor alpha que especifica el grado de transparencia: alpha = 1.0 es totalmente opaco, alpha = 0.0 es totalmente transparente. AlphaComposite soporta la mayoria de los estandares de composición como se muestra en la siguiente tabla. Source-over (SRC_OVER) Si los pixels del objeto que está siendo renderizado (la fuente) tienen la misma posición que los pixels renderizados préviamente (el destino), los pixels de la fuente se renderizan sobre los pixels del destino. Source-in (SRC_IN) Si los pixels de la fuente y el destino se solapan, sólo se renderizarán los pixels que haya en el área solapada. Source-out (SRC_OUT) Si los pixels de la fuente y el destino se solapan, sólo se renderizarán los pixels que haya fuera del área solapada. Los pixels que haya en el área solapada se borrarán. Destination-over Si los pixels de la fuente y del destino se solapan, sólo se (DST_OVER) renderizarán los pixels de la fuente que haya fuera del área
  • 17. solapada. Los pixels que haya en el área solapada no se cambian. Destination-in (DST_IN) Si los pixels de la fuente y del destino se solapan, el alpha de la fuente se aplica a los pixels del área solapada del destino. Si el alpha = 1.0, los pixels del área solapada no cambian; si alpha es 0.0 los pixels del área solapada se borrarán. Destination-out (DST_OUT) Si los pixels de la fuente y del destino se solapan, se aplica el alpha de la fuente a los pixels del área solapada del destino. Si el alpha = 1.0, los pixels del área solapada no cambian; si alpha es 0.0 los pixels del área solapada se borrarán. Clear (CLEAR) Si los pixels de la fuente y del destino se solapan, los pixels del área solapada se borrarán. Composite Este programa ilustra los efectos de varias combinaciones de estilos de composición y valores de alpha.
  • 18. Controlar la Calidad del Dibujo Podemos usar el atributo 'rendering hint' de Graphics2D para especificar si queremos que los objetos sean dibujados tan rápido como sea posible o si preferimos que se dibujen con la mayor calidad posible. Para seleccionar o configurar el atributo 'rendering hint', Graphics2D podemos construir un objeto RenderingHints y pasarlo dentro de Graphics2D.setRenderingHints. Si sólo queremos seleccionar un hint, podemos llamar a Graphics2D. setRenderingHint y especificar la pareja clave-valor para el hint que queremos seleccionar. (Estas parejas están definidas en la clase RenderingHints.) RenderingHints soporta los siguientes tipos de hints.  Alpha interpolation--por defecto, calidad, o velocidad.  Antialiasing--por defecto, on, u off  Color rendering-por defecto, calidad, o velocidad  Dithering--por defecto, activado o desactivado  Fractional metrics--por defecto, on u off  Interpolation--vecino más cercano, bilinear, o bicúbico  Rendering--por defecto, calidad, o velocidad  Text antialiasing--por defecto, on u off. Construir Formas Complejas desde Geométricos Primitivos Construir un área geométrica (CAG) es el proceso de crear una nueva forma geométrica realizando operaciones con las ya existentes. En el API Java 2D un tipo especial de Shape llamado Area soporta operaciones booleanas. Podemos construir un Area desde cualquier Shape . Area soporta la siguientes operaciones booleanas: Unión Subtracción
  • 19. Intersección Or-Exclusivo (XOR) Áreas En este ejemplo, los objetos Area construyen una forma de pera partiendo de varias elipses. Soportar Interacción con el Usuario Para permitir que el usuario interactúe con los graficos que hemos dibujado, necesitamos poder determinar cuando el usuario pulsa sobre uno de ellos. El método hit de Graphics2D proporciona una forma para determinar fácilmente si ha ocurrido una pulsación de ratón sobre una Shape particular. De forma alternativa podemos obtener la posición del click de ratón y llamar a contains sobre la Shape para determinar si el click ocurrió dentro de los límites de la Shape. ShapeMover Este applet permite al usuario arrastrar la Shape por la ventana del applet. La Shape se redibuja en cada nueva posición del ratón para proporcionar información al usuario mientras la arrastra.
  • 20. Dibujar Múltiples Líneas de Texto Si tenemos un párrafo de texto con estilo que queremos que quepa dentro de una anchura especifica, podemos usar LineBreakMeasurer, que permite que el texto con estilo se rompa en líneas que caben dentro de un espacio visual. Como hemos aprendido en Mostrar Gráficos con Graphics2D, un objeto TextLayout representa datos de caracteres con estilo, que no se pueden cambiar, pero también permite acceder a la información de distribución. Los métodos getAscent y getDescent de TextLayout devuelven información sobre la fuente usada para posicionar las líneas en el componente. El texto se almacena como un AttributedCharacterIterator para que los atributos de fuente y tamaño de punto puedan ser almacenados con el texto. Ejemplo: LineBreakSample El siguiente applet posiciona un párrafo de texto con estilo dentro de un componente, usando LineBreakMeasurer, TextLayout y AttributedCharacterIterator.
  • 21. Impresión en Java Java 2D controla en forma general el proceso de impresión, al igual que también controla cómo y cuándo pueden dibujar los programas, nuestras aplicaciones proporcionan información sobre el documento a imprimir, y el sistema de impresión determina cuando necesita renderizar cada página. Este modelo de impresión permite soportar una amplio rango de impresoras y de sistemas. Incluso permite al usuario imprimir en una impresora de bitmaps desde un ordenador que no tiene suficiente memoria o espacio en disco para contener el mapa de bits de una página completa. En esta situación el sistema de impresión le pedirá a nuesta aplicación que renderize la página de forma repetida para que pueda ser imprimida como una serie de pequeñas imágenes. Para soportar impresión, una apliación necesita realizar dos tareas.  Job control--manejar el trabajo de impresión  Imaging--renderizar las páginas a imprimir Job Control Aunque el sistema controla todo el proceso de impresión, nuestra aplicación tiene que obtener la oportunidad de configurar un PrinterJob. El PrinterJob , el punto clave del control del proceso de impresión, almacena las propiedades del trabajo de impresión, controla la visión de los diálogos de impresión y se usa para inicializar la impresión. Para dirigir el PrinterJob a través del proceso de impresión, nuestra aplicación necesita 1. Obtener un PrinterJob llamando a PrinterJob.getPrinterJob 2. Decirle al PrinterJob dónde está el código de dibujo llamando a setPrintable o setPageable 3. Si se desea, mostrar los diálogos de configuración de página e impresión llamando a pageDialog y printDialog Iniciar la impresión llamando a print