!Ya estoy en youtube! suscribete a mi canal https://www.youtube.com/channel/UC6-tLGUyvfrb9ibuCipFQKg
Este es el mejor Blog en español dedicado a la tecnología Java, noticias, API's, Frameworks y toda mi experiencia.
miércoles, 29 de diciembre de 2021
Usando el dialogo de configuración de impresión
martes, 28 de diciembre de 2021
Un programa básico de impresión en Java
Esta sección explica como crear un programa básico de impresión que muestra un dialogo de impresión e imprime el texto "Hola Mundo" en la impresora seleccionada.
Imprimir un documento consiste en dos partes:
- La clase Job para controlar la impresión - Crear una petición de impresión, asociar la petición con una impresora, especificar el número de copias, e interacción del usuario con el dialogo de impresión
- Dibujando la página - Dibujar contenido en una página y administrar contenido que abarca páginas (paginación).
Primero crea una instancia de la clase Job. La clase que representa una petición de impresión y la mayoría de las otras clases relacionadas se encuentran en el paquete java.awt.print
A continuación proporciono el código que imprime en contenido en la pagina, esto se logra implementando la interfaz Printable.
Una aplicación por lo general mostrará un dialogo de impresión para que el usuario pueda ajustar varias opciones como son el numero de copias, la orientación de la pagina o seleccionar la impresora cuando tengo varias.
Este dialogo se muestra visible hasta que el usuario aprueba o cancela la impresión. La variable doPrint será true si el usuario confirmo que quiere continuar con la impresión.
Si la variable doPrint es falso, el usuario ha cancelado la impresión. Dado que mostrar el cuadro de dialogo es opcional, el valor devuelto es puramente informativo.
Si la variable doPrint es verdadero, entonces la aplicación solicitará que la impresión se realice, esto se concreta llamando al metodo print de clase PrinterJob.
La excepción PrinterException se lanzará si ocurre un problema al envíar nuestro trabajo a la impresora. Sin embargo, dado que el metodo PrinterJob.print retorna tan pronto como el trabajo ha sido enviado a la impresora, el usuario de la aplicación no puede identificar si no hay papel o si este se ha atascado. El control que proporciona la clase PrinterJob es suficiente para usos básicos de impresión.
La interfaz Printable tiene un solo metodo:
La clase PageFormat describe la orientación de la pagina (portrait o landscape), el tamaño del papel y el area donde se puede dibujar en unidades de 1/72 de una pulgada.
El área imprimible representa los límites de margen de la mayoría de las impresoras (margen del hardware). El area imprimible es el espacio dentro de estos margenes, y en la práctica, a menudo se limita aún más para dejar espacio para encabezados o pies de página.
El parámetro page en base zero representa el numero de pagina que será impreso.
El siguiente código representa una implementación completa de la clase Printable
Recuerda que la impresora tiene un margen definido y lo debes de considerar, por ello llamamos al método translate de la clase Graphics. Para conocer el tamaño del margen llamamos a los métodos getImageableX y getImageableY
Enviar una instancia de la clase Graphics a la impresora es esencialmente lo mismo que renderizarla en la pantalla. En ambos casos, debe realizar los siguientes pasos:
- Dibujar una cadena de texto de prueba es tan fácil como las otras operaciones que se describieron para dibujar usando la clase Graphics2D.
- Los gráficos de la impresora tienen una resolución más alta, que debería ser transparente para la mayoría de los programas.
- El método Printable.print() es llamado por el sistema de impresión al igual que se llama al método Component.paint() para pintar un componente en la pantalla. El sistema de impresión llamará al método Printable.print() para la pagina 0, 1, .. etc.
- Hasta que el método print() devuelva NO_SUCH_PAGE.
- Se puede llamar al método print() con el mismo índice de pagina varías veces hasta que se complete el documento. Esta función es aplicada cuando el usuario especifica atributos como múltiples copias con la opción collate.
- El área imprimible de PageFormat determina el área del clip. El área imprimible también es importante para calcular la paginación o cómo distribuir el contenido en las páginas impresas, ya que los saltos de página están determinados por cuánto cabe en cada página.
Nota: Se puede omitir una llamada al método print () para ciertos índices de página si el usuario ha especificado un rango de página diferente que no involucra un índice de página en particular.
domingo, 19 de diciembre de 2021
Impresión en Java
La API Java 2D te permite dibujar en cualquier superficie, una extensión natural de eso es la habilidad de imprimir los gráficos Java 2D. Una impresora puede ser considerada un dispositivo grafico al igual que la pantalla.
La API de impresión Java 2D no está limitada a solo imprimir gráficos. Ya que también es posible imprimir el contenido de la interface de usuario de una aplicación. El contenido puede ser impreso enviando dato sin formato a la impresora delegando el formateo a la API de impresión Java 2D, o usando la API Graphics de Java 2D.
En esta lección vas a explorar las funciones de las clases printer y job que pertenecen a la API de impresión Java 2D y que son complementos de los elementos del renderizado. Aprenderás como buscar las impresoras configuradas en el sistema operativo o en la red y consultar información relevante sobre estas impresoras tales como el tamaño del papel soportado, seleccionar los parámetros de impresión y diálogos de usuarios.
Las principales clases e interfaces incluidas en la API de impresión se encuentran en los paquetes java.awt.print y javax.print (este último paquete te permite acceder a los servicios de impresión).
Las operaciones básicas de impresión son representados en las siguientes secciones:
- Un programa básico de impresión - Esta sección describe la interface Printable y presenta un programa básico de impresión.
- Usando el dialogo de parametros de impresión - Estás secciones explica como mostrar el dialogo Configuración de Impresión
- Imprimiendo un documento con varías paginas - Esta sección explica como usar paginación para imprimir un documento con varias paginas.
- Trabajando con servicios de impresión y atributos - Esta sección te enseña acerca de los servicios de impresión, como especificar el formato de impresión de los datos, y como crear una peticion de impresión usando el paquete javax.print.
- Imprimiendo el contenido de una interfaz de usuario - Esta sección explica como imprimir el contenido de una ventana.
- Soporte de impresión en componentes Swing - Esta sección proporciona una breve descripción de la funcionalidad de impresión en Swing y se refiere a clases e interfaces especificas de Swing
miércoles, 8 de diciembre de 2021
Genericos en Java
En cualquier proyecto de software no trivial, los errores son simplemente una realidad. Una planificación, programación y pruebas cuidadosas pueden ayudar a reducir su omnipresencia, pero de alguna manera, en algún lugar, siempre encontrarán una manera de introducirse en su código. Esto se vuelve especialmente evidente a medida que se introducen nuevas funciones y su código base crece en tamaño y complejidad.
Afortunadamente, algunos errores son más fáciles de detectar que otros. Los errores en tiempo de compilación, por ejemplo, se pueden detectar desde el principio; puede utilizar los mensajes de error del compilador para averiguar cuál es el problema y solucionarlo, en ese mismo momento. Los errores en tiempo de ejecución, sin embargo, pueden ser mucho más problemáticos; no siempre aparecen de inmediato, y cuando lo hacen, puede ser en un punto del programa que está muy alejado de la causa real del problema.
Los genéricos (o Generics) agregan estabilidad a su código al hacer que más errores sean detectables en el momento de la compilación.
¿Por qué utilizar genéricos?
En pocas palabras, los genéricos permiten que los tipos (clases e interfaces) sean parámetros al definir clases, interfaces y métodos. Al igual que los parámetros formales más familiares utilizados en las declaraciones de métodos, los parámetros de tipo proporcionan una forma de reutilizar el mismo código con diferentes entradas. La diferencia es que las entradas a los parámetros formales son valores, mientras que las entradas a los parámetros de tipo son tipos.
El código que usa genéricos tiene muchas ventajas sobre el código no genérico:
Comprobaciones de tipo más estrictas en tiempo de compilación.
Un compilador de Java aplica una fuerte verificación de tipos al código genérico y emite errores si el código viola la seguridad de los tipos. Arreglar errores en tiempo de compilación es más fácil que arreglar errores en tiempo de ejecución, que pueden ser difíciles de encontrar.
Eliminación de conversión de tipo (Cast).
El siguiente fragmento de código sin genéricos requiere conversión:
Cuando se reescribe para usar genéricos, el código no requiere conversión:
Permitir a los programadores implementar algoritmos genéricos.
Mediante el uso de genéricos, los programadores pueden implementar algoritmos genéricos que funcionan en colecciones de diferentes tipos, se pueden personalizar y son seguros para los tipos y más fáciles de leer.
Tipos genéricos
Un tipo genérico es una clase o interfaz genérica que se parametriza sobre tipos. La siguiente clase Box se modificará para demostrar el concepto.
Box, una clase simple
Comience examinando la clase Box no genérica que opera sobre objetos de cualquier tipo. Solo necesita proporcionar dos métodos: set, que agrega un objeto al cuadro, y get, que lo recupera:
Una versión Generic de la clase Box
Convenciones de nomenclatura de parámetros de tipo
- E - Elemento (utilizado ampliamente por Java Collections Framework)
- K - Clave
- N - Número
- T - Tipo
- V - Valor
- S, U, V, etc. - 2. °, 3. °, 4. ° tipos