viernes, 4 de mayo de 2012

Imprimir JTable directamente eligiendo impresora.


En esta entrada os voy a poner un ejemplo de como imprimir una Tabla en vuestra impresora directamente, es muy sencillo así que no tiene muchas florituras. 

La salida por la impresora será Un encabezado, la tabla en el cuerpo de la hoja y en el pie el número de página. 

public class Principal {
private static JButton btImprimir;

public static void main(String[] args) {
try {
 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e) {
 e.printStackTrace();
} catch (InstantiationException e) {
 e.printStackTrace();
} catch (IllegalAccessException e) {
 e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
 e.printStackTrace();
}
JFrame v = new JFrame();
v.setBounds(0,0,835,360);
v.setLayout(null);
v.setVisible(true);
v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final String [] columnas = {"NOMBRE", "APELLIDOS", "DNI", "ESTADO", "BLOQUEO", "ALTA"};
    
final DefaultTableModel dtm = new DefaultTableModel();
final JTable tabla1 = new JTable(dtm);
tabla1.setUpdateSelectionOnSort(true);
for (int i=0; i<6; i++){
dtm.addColumn(columnas[i]);
}
tabla1.setPreferredScrollableViewportSize(new Dimension(800,200));
JScrollPane scrollPane = new JScrollPane(tabla1);
v.add(scrollPane);
scrollPane.setBounds(10,10,800,200);
final Object [] fila2 = {"Carlos", "Mateo Ruiz", "71024121F", "ACTIVO", "0", "2012/02/02"};
final Object [] fila3 = {"Marta", "Perez Hidalgo", "29116227H", "ACTIVO", "1", "2010/21/10"};
dtm.addRow(fila2);
dtm.addRow(fila3);
btImprimir = new JButton("IMPRIMIR");
btImprimir.setBounds(10, 250, 120, 25);
v.add(btImprimir);
btImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
        
                      try {
       
       
           // tabla1.print();//envia los datos de la tabla a la impresora
                 
                  MessageFormat headerFormat = new MessageFormat("Listado de Clientes 2010-2012);
                  MessageFormat footerFormat = new MessageFormat("- Página {0} -");
                  tabla.print(PrintMode.FIT_WIDTH, headerFormat, footerFormat);
                                   
                 
         } catch (PrinterException ex) {
             JOptionPane.showMessageDialog(null, "No se ha podido imprimir correctamente, intentalo más tarde.");
         }                 
                
            }
            
            
        });
v.repaint();
}

13 comentarios:

  1. excelente..muchas gracias por el aporte.

    ResponderEliminar
  2. De nada Herlan, me alegro que te sirviera.

    Un saludo,

    ResponderEliminar
  3. Si el Jtable lo tengo lleno con un resultset como sería el codigo? agradecería tu respuesta

    ResponderEliminar
    Respuestas
    1. debe ser lo mismo, si ya esta llena tu tabla con el resultset se debe de imprimir

      Eliminar
  4. una consulta, a mi me aparece la tabla en tamaño que no entra o no se ajusta a la hoja (A4), que puede ser?

    ResponderEliminar
  5. Hola Dario,

    Yo al imprimir me sale todo lo que ocurre es que me sale más pequeño de lo normal. Has probado en A4- horizontal por si la tabla tuviera demasiadas celdas como para mostrarlo?

    ResponderEliminar
  6. Puedes compartir tu código o tu proyecto para entender mejor, yo uso NetBeans, gracias por el aporte

    ResponderEliminar
  7. Puedes compartir tu código o tu proyecto para entender mejor, yo uso NetBeans, gracias por el aporte

    ResponderEliminar
  8. Gracias amigo, nos has salvado ya que lo necesitabamos con mi grupo para un trabajo práctico!:D <3

    ResponderEliminar
  9. MessageFormat headerFormat = new MessageFormat("Listado de Clientes 2010-2012 " );

    aqui falta cerrar esta comillas doble "

    ResponderEliminar
  10. todo el código funciona perfecto falta solo cerra esa comilla doble

    ResponderEliminar
  11. y agregar el 1
    tabla.print(PrintMode.FIT_WIDTH, headerFormat, footerFormat);
    tabla1.print(PrintMode.FIT_WIDTH, headerFormat, footerFormat);
    Saludos y gracias por compartir

    ResponderEliminar
  12. Como hago para que se ajuste el contenido de la tabla a tamaño carta??

    ResponderEliminar