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();
}