Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Java2D / Imprimir Swing

Imprimir Swing

Autor jc mouse jueves, mayo 3, 2012

Java Printing nos permite hacer uso de las impresoras del sistema para, valga la redundancia 🙂 imprimir los gráficos de java2d, para que esto sea posible, debe implementarse el objeto abstracto Printable en las clases que quieran hacer uso de esa propiedad. Veamos un ejemplo:

1. Crea un nuevo proyecto en netbeans y añade un JFrame (Nombre: interfaz.java), añade un JButton (Nombre: cmdPrint) y si quieres añade algunos controles swing tambien

proyecto netbeans

2. Dirígete al código del JFrame, las librerias que utilizamos son:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

Debes añadir estas en la cabecera del JFrame

3. Ahora debemos implementar el Printable al JFrame, por defecto netbeans lo crea de la siguiente manera:

public class interfaz extends javax.swing.JFrame {

Debes modificarlo para que se vea asi:

public class interfaz extends javax.swing.JFrame implements Printable {

Netbeans te muestra una alerta que te dice «Implementar todos los métodos abstractos», debes implementarlos haciendo clic sobre el aviso. Te genera una funcion propia del Printable:

    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

4.  Reemplaza el método generado PRINT por:

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException  {
        if (pageIndex == 0)
        {
            Graphics2D g2d = (Graphics2D) graphics;
            g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
            this.printAll(graphics);
            return PAGE_EXISTS;
        }
        else
            return NO_SUCH_PAGE;        
    }

5.  Para terminar implementamos la accion Print desde el JButton (cmdPrint), el código es:

 private void cmdPrintActionPerformed(java.awt.event.ActionEvent evt) {
        //Crea y devuelve un printerjob que se asocia con la impresora predeterminada
        //del sistema, si no hay, retorna NULL
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        //Se pasa la instancia del JFrame al PrinterJob
        printerJob.setPrintable(this);
        //muestra ventana de dialogo para imprimir
        if ( printerJob.printDialog())
        {
            try {
                printerJob.print();
            } catch (PrinterException ex) {
            System.out.println("Error:" + ex);
            }
        }
    }

Eso es todo, implementa la interfaz desde el Main y ejecuta, si tienes una impresora instalada en tu equipo, cuando presiones el boton «Imprimir JFrame» saldrá la ventana de dialogo propia de tu impresora

Yo utilice una impresora virtual para imprimir en formato PDF y el resultado es el siguiente:

PDF JFrame

Archivos del proyecto Printable estan en este enlace

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Introducción a Python en Java

Introducción a Python en Java

Python es un lenguaje de programación interpretado,  de programación multiparadigma, ya que soporta orientación a objeto...

Primeros pasos con Vue CLI: Crea tu Entorno de Trabajo

Primeros pasos con Vue CLI: Crea tu Entorno de Trabajo

En un post anterior [Introducción a VueJS framework para el desarrollo FrontEnd] realizamos una breve introducción a Vue...

Obtener Metadatos de un ResultSet

Obtener Metadatos de un ResultSet

En este post mostramos un ejemplo de uso de la interface ResultSetMetaData el cual se extiende Wrapper que es una interf...

JCPanel 3.0

JCPanel 3.0

Nueva versión de un viejo proyecto swing «JCMousePanel» que nos permitía agregar imágenes en los contenedores JPanel. En...

Transacciones con Java y MariaDB

Transacciones con Java y MariaDB

Se define como Transacción en base de datos a una «unidad lógica de trabajo» compuesta por un conjunto de operaciones qu...

Crea un Themes WordPress con Netbeans – Configuracion

Crea un Themes WordPress con Netbeans – Configuracion

Este post te enseña una manera que tengo de configurar Netbeans para crear y ejecutar un proyecto php utilizando el CMS...

8 comentarios en “Imprimir Swing”

  1. antonio dice:

    te tengo una pregunta:
    por que me marca error en esta parte del codigo
    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    en «getImageableX()» y «getImageableY()»
    gracias por tu pronta respuesta…

    1. Mouse dice:

      ¿cual es el error? 🙂

  2. Carlos Mario dice:

    Hola, Estoy haciendo desde hace un largo tiempo una aplicación para votaciones estudiantiles y no SABES cuanto me ha servido esto.

    No Tengo nada mas que agradecerte Mucho por compartir tu conocimiento con los demás 🙂

  3. Robert dice:

    Muy bueno !! ^^ si Funcioona gracias amigo!

  4. Nata dice:

    GRACIAS, POR FIN FUNCIONA 😀

  5. Azu dice:

    Funcionó a la perfección ,muchas gracias!!

  6. Nereo Alfredo dice:

    Disculpa y para imprimir por ambos lados de la hoja???

    1. Mouse dice:

      debes configurar hojas de impresión es decir establecer área de impresión para cada hoja en este caso panel

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Herramientas

Generador de Enlaces a Whatsapp