api java 2d

21
2011 Escuela Superior Politécnica del Litoral Carolina Dávila Llerena Api Java 2D

Upload: espol

Post on 25-Jun-2015

6.964 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Api  java 2D

2011

Escuela Superior Politécnica del Litoral

Carolina Dávila Llerena

Api Java 2D

Page 2: Api  java 2D

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.

Page 3: Api  java 2D

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.

Page 4: Api  java 2D

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.

Page 5: Api  java 2D

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.

Page 6: Api  java 2D

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.

Page 7: Api  java 2D

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.

Page 8: Api  java 2D

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.

Page 9: Api  java 2D

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.

Page 10: Api  java 2D

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

Page 11: Api  java 2D

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.

Page 12: Api  java 2D

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.

Page 13: Api  java 2D

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.

Page 14: Api  java 2D

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

Page 15: Api  java 2D

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:

Page 16: Api  java 2D

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 (DST_OVER)

Si los pixels de la fuente y del destino se solapan, sólo se renderizarán los pixels de la fuente que haya fuera del área

Page 17: Api  java 2D

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.

Page 18: Api  java 2D

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

Page 19: Api  java 2D

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.

Page 20: Api  java 2D

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.

Page 21: Api  java 2D

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