Api java 2D

7,855 views

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,855
On SlideShare
0
From Embeds
0
Number of Embeds
310
Actions
Shares
0
Downloads
213
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Api java 2D

  1. 1. 2011Api Java 2D Escuela Superior Politécnica del Litoral Carolina Dávila Llerena
  2. 2. API Java 2DJava 2D es un API que nos sirve para dibujar gráficos. Podemos utilizar texto, y tienelas capacidades de manejo de imágenes para los programas de Java, utilizandoextensión del AWT en Java. Cada dibujo en Java 2D puede tratarse como rellenar unaforma 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 dedibujos 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 2DJava 2d posee un mecanismo de renderizado básico como en las otras versiones delJDK, este sistema de dibujo controla cuando u como dibuja un programa.Cuando se necesita mostrar un componente, automáticamente se llama al métodopaint 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 paraproporcionar 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 Graphicspasado al método de dibujo de un componente a un objeto Graphics2D.
  3. 3. Contexto de Renderizado de Graphics2DA 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 losmé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. 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 losmétodos set Attribute.  setStroke  setPaint  setComposite  setTransform  setClip  setFont  setRenderingHintsCuando configuramos un atributo, se le pasa al objeto el atributo apropiado. Porejemplo, para cambiar el atributo paint a un relleno de gradiente azul-gris, deberíamosconstruir 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. Simodificamos un objeto atributo que forma parte del contexto Graphics2D,necesitamos llamar al método set para notificarlo al contexto. La modificación de unatributo de un objeto durante el renderizado puede causar comportamientosimpredecibles. Métodos de renderizado de Graphics2DGraphics2D proporciona los siguientes métodos generales de dibujado que puedenusarser 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 formasparticulares, como drawOval y fillRect.
  5. 5. Sistema de CoordenadasEl 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 deldispositivo: el espacio de coordenadas que usan nuestros programas. Todos losgeométricos pasados a las rutinas Java 2D de renderizado se especifican encoordenadas de espacio de usuario.Cuando se utiliza la transformación por defecto desde el espacio de usuario al espaciode 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 lacoordenada y hacia abajo.El espacio de dispositivo es un sistema de coordenadas dependiente del dispositivoque varía de acuerdo a la fuente del dispositivo. Aunque el sistema de coordenadaspara una ventana o una pantalla podría ser muy distinto que para una impresora, estasdiferencias son invisibles para los programas Java. Las conversiones necesarias entre elespacio de usuario y el espacio de dispositivo se realizan automáticamente durante eldibujado.Conceptos básicosEstos objetos son parte necesaria de cada operación de dibujo Java 2D.FormasJava 2D tiene varias formas que pueden ser utilizadas como rectángulos, cuadrados, círculoslos 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 afectadasya que no son pixeles.
  6. 6. Formas 2DLas clases del paquete java.awt.geom definen gráficos primitivos comunes, comopuntos, 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  RoundRectangle2DExcepto para Point2D y Dimension2D, cada una de las otras clases geométricasimplementa el interface Shape, que proporciona un conjunto de métodos comunes paradescribir e inspeccionar objetos geométricos bi-dimensionales.Con estas clases podemos crear de forma virtual cualquiere forma geométrica ydibujarla a través de Graphics2D llamando al método draw o al método fill. Porejemplo, las formas geométricas del siguiente applet están definidas usando losgeométricos básicos de Java 2D.Formas RectangularesLos primitivos Rectangle2D, RoundRectangle2D, Arc2D, y Ellipse2D descienden delRectangularShape, que define métodos para objetos Shape que pueden ser descritospor una caja rectángular. La geometría de un RectangularShape puede ser extrapoladadesde un rectángulo que encierra completamente el exterior de la Shape.
  7. 7. QuadCurve2D y CubicCurve2DLa clase QuadCurve2D nos permite crear segmentos de curvas cuadráticos. Una curvacuadrática está definida por dos puntos finales y un punto de control.La clase CubicCurve2D nos permite crear segmentos de curvas cúbicos. Una curvacúbica está definida por dos puntos finales y dos puntos de control. Las siguientesfiguras muestran ejemplos de curvas cuadráticas y cúbicas.GevthLa clase GeneralPath nos permite crear una curva arbitraria especificando una serie deposiciones a lo largo de los límites de la forma. Estas posiciones pueden ser conectadaspor segmentos de línea, curvas cuadráticas o curvas cúbicas. La siguiente figura puedeser creada con 3 segmentos de línea y una curva cúbica. AreasCon la clase Area podemos realizar operaciones boolenas, como uniones, interseccionesy substracciones, sobre dos objetos Shape cualesquiera. Esta técnica, nos permite crearrápidamente objetos Shape complejos sin tener que describir cada línea de segmento ocada curva.
  8. 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 quegenera una imagen produce un recorte circular de la imagen.CompuestosDurante cualquier operación de dibujo, hay una fuente (los píxeles que son producidos por elpincel) y un destino (los píxeles ya en la pantalla). Normalmente, los píxeles fuentesimplemente sobrescriben los píxeles de destino, pero el compuesto permite modificar estecomportamiento.El compuesto, dados los píxeles fuente y destino, produce el resultado final que por últimoaparece en la pantalla. El compuesto más común es java.awt.AlphaComposite, el cual trata lospíxeles que están siendo dibujados como parcialmente transparentes, para que los píxelesdestino se muestren en algún grado.RellenadoPara 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 parcialmentedentro y parcialmente fuera de la forma pueden ser afectados en menor grado si está activadoel Anti-aliasing.El pincel es requerido para generar un color de cada uno de los píxeles que se van a pintar. Enel 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 yaestán en la pantalla para producir el resultado final.
  9. 9. TextoCuando 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 seutiliza un componente de texto, mucho del trabajo lo hacen por nosotros--por ejemplo, losobjetos JTextComponent proporcionan soporte interno para chequeo de pulsaciones y paramostrar texto internacional.Si queremos mostrar una cadena de texto estática, podemos dibujarla directamente a travésde Graphics2D usando el método drawString. Para especificar la fuente, podemos usar elmétodo setFont de Graphics2D.Si queremos implementar nuestras propias rutinas de edición de texto o necesitamos máscontrol sobre la distribucción del texto que la que proporcionan los componentes de texto,podemos usar las clases del paquete java.awt.font.FuentesLas formas que una fuente usa para representar los caracteres de una cadena son llamadasglyphs. Un caracter particular o una combinación de caracteres podría ser representada comouno o más glyphs. Por ejemplo, á podría ser representado por dos glyphs, mientras que laligadura fi podría ser representada por un sólo glyph.
  10. 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áticoGraphicsEnvironment.getLocalGraphicsEnvironment y preguntando al GraphicsEnvironmentdevuelto. El método getAllFonts devuelve un array que contiene ejemplares Font para todaslas fuentes disponibles en el sistema; getAvailableFontFamilyNames devuelve una lista de lasfamilias de fuentes disponibles.Objetos AvanzadosEstos objetos pueden ser entendidos en relación con los objetos más simples escritos antes.TransformaciónCada operación Java 2D es sujeto a transformación, para que las formas pueden sertraducidas, rotadas, y escaladas cuando son dibujadas. La transformación activa es a menudola transformación identidad, la cual no hace nada.Rellenar usando una transformación puede verse como simplemente crear una nueva formatransformada y entonces rellenar esa forma.MovimientoAdemás de la operación rellenar, Java 2D suministra una operación dibujar. Mientras rellenardibuja el interior de una forma, dibujar dibuja su contorno. El contorno puede ser tan simplecomo 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, elmovimiento produce una nueva forma que representa su exterior. Por ejemplo, un segmentode línea infinitamente fino (sin interior) no puede ser movido a un rectángulo de ancho de unpíxel.Una operación dibujar puede por lo tanto ser descrito como crear un nuevo, objeto movido yentonces rellenar ese objeto.Imágenes
  11. 11. El API 2D de Java implementa un nuevo modelo de imagen que soporta la manipulación deimágenes de resolución fija almacenadas en memoria. Una nueva clase Image en el paquetejava.awt.image, puede usar BufferedImage, para manipular datos de una imagen recuperadosdesde un fichero o una URL.Por ejemplo, se puede usar un BufferedImage para implementar doble buffer -- los elementosgráficos son dibujados fuera de la pantalla en el BufferedImage y luego son copiados a lapantalla a través de llamadas al método drawImage de Graphics2D.Las clases BufferedImage y BufferedImageOp también permiten realizar una gran variedad deoperaciones de filtrado de imágenes como blur. El modelo de imagen productor/consumidorproporcionado en las versiones anteriores del JDK sigue siendo soportado por razones decompatibilidad.ImpresiónTodos 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 proporcionacaracterísticas de composición de documentos que nos permite realizar dichas operacionescomo 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 controlacuando se dibujan las páginas, como lo hace el sistema gráfico de la pantalla cuando uncomponente se dibuja en la pantalla.Nuestra aplicación proporciona al sistema de impresión la información sobre el documento aimprimir, y el sistema de impresión determina cuando necesita dibujar cada página. Cuandolas páginas necesitan ser dibujadas, el sistema de impresión llama al método print de laaplicación con el contexto Graphics apropiado. Para usar las características del API 2D de Javaen la impresión, debemos forzar el objeto Graphics a un objeto Graphics2D, igual que se hacecuando se dibuja en la pantalla.
  12. 12. Mostrar Gráficos con Graphics2DNos muestra cómo usar Graphics2D para mostrar gráficos con líneas exteriores, estilos derelleno, 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 RellenoPunteado y Relleno de Gráficos PrimitivosCambiando el punteado y los atributos de dibujo en el contexto de Graphics2D, antes deldibujo, podemos fácilmente aplicar estilos divertidos de líneas y patrones de relleno paragráficos primitivos. Por ejemplo, podemos dibujar una línea punteada creando el objeto Strokeapropiado y llamando a setStroke para añadirlo al contexto Graphics2D antes de dibujar lalínea. De forma similar, podemos aplicar un relleno de gradiente a un Shape creando un objetoGradientPaint y añadiendo al contexto Graphics2D llamando a setPaint antes de dibujar laShape. GradientePaint StrokeFormas geométricas usando los métodos Graphics2D draw y fill.
  13. 13. Estilos de LíneaLos estilos de línea están definidos por el atributo stroke en el contexto Graphics2D. Paraseleccionar el atributo stroke podemos crear un objeto BasicStroke y pasarlo dentro delmé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 elmétodo draw.BasicStroke soporta tres estilos de unión: JOIN_BEVEL JOIN_MITER JOIN_ROUNDEl 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_SQUAREPatrón de RellenoLos patrones de rellenos están definidos por el atributo paint en el contexto Graphics2D. Paraseleccionar el atributo paint, se crea un ejemplar de un objeto que implemente el interfacePaint y se pasa dentro del método Graphics2D setPaint.Tres clases implementan el interface Paint: Color, GradientPaint, y TexturePaint, GradientPainty TexturePaint son nuevas en el JDK 1.2.
  14. 14. El patrón para una TexturePaint esta definido por un BufferedImage. Para crear unTexturePaint, se especifica una imagen que contiene el patrón y un rectángulo que se usa parareplicar y anclar el patrón. StrokeAndFillEl 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 dibujoseleccionado, 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ódigocrea un Rectangle y un Ellipse2D.Double y los introduce en el array shapes. Transformar Formas, Texto e ImágenesPodemos modificar el atributo transform en el contexto Graphics2D para mover, rotar, escalary modificar gráficos primitivos mientras son dibujados. El atributo transform está definido porun ejemplar de AffineTransform.Graphics2D proporciona varios métodos para cambiar el atributo transform. Podemosconstruir un nuevo AffineTransform y cambiar el atributo transform de Graphics2D llamando almétodo setTransform.AffineTransform define los siguientes métodos para hacer más sencilla la construcción denuevas transformaciones:  getRotateInstance  getScaleInstance  getShearInstance
  15. 15.  getTranslateInstanceDe forma alternativa podemos usar uno de los métodos de transformación de Graphics2D paramodificar 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 duranteel 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 yCuando se elige una opción de transformación, se modifica un ejemplar de AffineTransform yse concatena con una transformación de movimiento que mueve la Shape hacia el centro de laventana. La transformación resultante se pasa al método setTransform para seleccionar elatributo transform de Graphics2D Recortar la Región de DibujoCualquier Shape puede usarse como un path de recortado que restringe las porciones del áreade 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 defineel path de recortado que queramos usar. Podemos reducir el path de recortado llamando almétodo clip y pasándolo en otra Shape; el atributo clip se configura a la intersección entre elclip actual y el Shape especificado.ClipImageun path de recortado para revelar diferentes porciones de una imagen:
  16. 16. StarryUn área de recortado también puede crearse desde una cadena de texto existente. Elsiguiente ejemplo crea un TextLayout con la cadena The Starry Night. Luego, obtieneuna línea exterior del TextLayout. El método TextLayout.getOutline devuelve un objetoShape y un Rectangle creado a partir de los límites del objeto Shape. Los límitescontienen todos los pixels que layout puede dibujar. El color en el contexto gráfico seselecciona a azul y se dibuja la figura exterior de la forma, como ilustran la siguienteimagen y el fragmento de código.Componer GráficosLa clase AlphaComposite encapsula varios estilos de composición, que determinancómo se dibujan los objetos solapados. Un AlphaComposite también puede tener unvalor alpha que especifica el grado de transparencia: alpha = 1.0 es totalmente opaco,alpha = 0.0 es totalmente transparente. AlphaComposite soporta la mayoria de losestandares 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. 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.CompositeEste programa ilustra los efectos de varias combinaciones de estilos de composición yvalores de alpha.
  18. 18. Controlar la Calidad del DibujoPodemos usar el atributo rendering hint de Graphics2D para especificar si queremosque los objetos sean dibujados tan rápido como sea posible o si preferimos que sedibujen con la mayor calidad posible.Para seleccionar o configurar el atributo rendering hint, Graphics2D podemosconstruir un objeto RenderingHints y pasarlo dentro deGraphics2D.setRenderingHints. Si sólo queremos seleccionar un hint, podemos llamara Graphics2D. setRenderingHint y especificar la pareja clave-valor para el hint quequeremos 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étricosPrimitivosConstruir un área geométrica (CAG) es el proceso de crear una nueva formageométrica realizando operaciones con las ya existentes. En el API Java 2D un tipoespecial de Shape llamado Area soporta operaciones booleanas. Podemos construir unArea desde cualquier Shape .Area soporta la siguientes operaciones booleanas: Unión Subtracción
  19. 19. Intersección Or-Exclusivo (XOR)ÁreasEn este ejemplo, los objetos Area construyen una forma de pera partiendo de variaselipses.Soportar Interacción con el UsuarioPara 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étodohit de Graphics2D proporciona una forma para determinar fácilmente si ha ocurridouna pulsación de ratón sobre una Shape particular. De forma alternativa podemosobtener la posición del click de ratón y llamar a contains sobre la Shape paradeterminar si el click ocurrió dentro de los límites de la Shape.ShapeMoverEste applet permite al usuario arrastrar la Shape por la ventana del applet. La Shape seredibuja en cada nueva posición del ratón para proporcionar información al usuario mientrasla arrastra.
  20. 20. Dibujar Múltiples Líneas de TextoSi tenemos un párrafo de texto con estilo que queremos que quepa dentro de unaanchura especifica, podemos usar LineBreakMeasurer, que permite que el texto conestilo se rompa en líneas que caben dentro de un espacio visual. Como hemos aprendidoen Mostrar Gráficos con Graphics2D, un objeto TextLayout representa datos decaracteres con estilo, que no se pueden cambiar, pero también permite acceder a lainformación de distribución. Los métodos getAscent y getDescent de TextLayoutdevuelven información sobre la fuente usada para posicionar las líneas en elcomponente. El texto se almacena como un AttributedCharacterIterator para que losatributos de fuente y tamaño de punto puedan ser almacenados con el texto. Ejemplo: LineBreakSampleEl siguiente applet posiciona un párrafo de texto con estilo dentro de un componente,usando LineBreakMeasurer, TextLayout y AttributedCharacterIterator.
  21. 21. Impresión en JavaJava 2D controla en forma general el proceso de impresión, al igual que tambiéncontrola cómo y cuándo pueden dibujar los programas, nuestras aplicacionesproporcionan información sobre el documento a imprimir, y el sistema de impresióndetermina cuando necesita renderizar cada página.Este modelo de impresión permite soportar una amplio rango de impresoras y desistemas. Incluso permite al usuario imprimir en una impresora de bitmaps desde unordenador que no tiene suficiente memoria o espacio en disco para contener el mapa debits de una página completa. En esta situación el sistema de impresión le pedirá a nuestaaplicación que renderize la página de forma repetida para que pueda ser imprimidacomo 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 ControlAunque el sistema controla todo el proceso de impresión, nuestra aplicación tiene queobtener la oportunidad de configurar un PrinterJob. El PrinterJob , el punto clave delcontrol 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 printDialogIniciar la impresión llamando a print

×