Page 1 of 2 12 LastLast
Results 1 to 10 of 11
  1. #1
    Join Date
    Aug 2011
    Posts
    21
    Post Thanks / Like
    Rep Power
    0

    Red face Imprimir (impresora) panel con sus componentes

    Buenas noches, lo que tengo es un panel con una tabla que contiene botones y labels, haciendo clic en los botones modifico la información de su propio texto y la de los lables. son en realidad 5 Jpanel y pues quiero imprimir esa mis tabla. Encontré una herramienta llamada iText, para crear pdf y tiene una opción para generar tablas, y es una opción creando la tabla en el pdf y mandando a imprimir el pdf, pero se me hace un poco tedioso. Hay alguna forma como de poder imprimir todo el panel, o una forma como de un pantallazo o algo así?

    Muchas gracias.



    PD.: he leído algo sobre printJod, printable, grafics, pero no entiendo nada, no entiendo cómo puedo imprimir con eso.

  2. #2
    Join Date
    Aug 2011
    Location
    Panamá
    Posts
    595
    Post Thanks / Like
    Rep Power
    1324

    Default

    Hola que tal, bueno mira si existe una forma diferente y algo más fácil, solo que es algo así como una imagen de tú panel, te saldría con botones y todo lo que tenga el panel.
    Te pasaría un ejemplo pero ahorita estoy algo ocupado, pero puedes investigar por:
    - panel.printAll(objeto grafics)
    - PrinterJob.getPrinterJob()
    - Book

    Bueno espero te sirva.
    Saludos,

  3. #3
    Join Date
    Aug 2011
    Location
    Panamá
    Posts
    595
    Post Thanks / Like
    Rep Power
    1324

  4. #4
    Join Date
    Aug 2011
    Posts
    21
    Post Thanks / Like
    Rep Power
    0

    Default

    Hola arielb, muchas gracias por tu colaboración.

    soy principiante y la verdad el código que hay no lo pude correr, no hacía nada, no pude correrlo, pero entonces atendí lo que me dices en la primera respuesta y encontré esto:

    http://download.oracle.com/javase/tu...nting/gui.html

    con ese código, lo probé y funciona bien, guarda en xps. Probé enviarle el scroll y funciona perfecto, eso es lo que necesito. Pero no he podido cuadrar que desde otra clase le sea enviado el JPanel que quiero imprimir. Esto una de las formas que he probado y no hace nada, ni me muestra algún error ni warning:


    Clase encargada de la impresión:
    Code:
    package impresion;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.print.*;
    
    public class PrintUIWindow implements Printable, ActionListener {
    
        JPanel frameToPrint;
    
        public int print(Graphics g, PageFormat pf, int page) throws
                                                            PrinterException {
    
            if (page > 0) { /* We have only one page, and 'page' is zero-based */
                return NO_SUCH_PAGE;
            }
    
            /* User (0,0) is typically outside the imageable area, so we must
             * translate by the X and Y values in the PageFormat to avoid clipping
             */
            Graphics2D g2d = (Graphics2D)g;
            g2d.translate(pf.getImageableX(), pf.getImageableY());
    
            /* Now print the window and its visible contents */
            frameToPrint.printAll(g);
    
            /* tell the caller that this page is part of the printed document */
            return PAGE_EXISTS;
        }
    
        public void actionPerformed(ActionEvent e) {
             PrinterJob job = PrinterJob.getPrinterJob();
             job.setPrintable(this);
             boolean ok = job.printDialog();
             if (ok) {
                 try {
                      job.print();
                 } catch (PrinterException ex) {
                  /* The job did not successfully complete */
                 }
             }
        }
    
        public PrintUIWindow(JPanel f) {
            frameToPrint = f;
        }
    
        
    }

    Clase principal:
    Code:
    package impresion;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    
    public class frame 
        {
        static JTextField pen;
        static JFrame f;
        static JPanel p1 = new JPanel();
        static JPanel p2;
        static JPanel p3;
        public static void main(String args[]) 
            {
             f = new JFrame("FRAME");
            p1 = new JPanel();
            p2 = new JPanel();
            p3 = new JPanel();
        
            JButton [][] botones = new JButton[2][3];
            for(int h =0; h<2; h++)
                for(int g =0; g<3; g++){
                    botones[h][g] = new JButton("panel 1");
                    p1.add(botones[h][g]);}
            JButton [][] label = new JButton[2][3];
            for(int h =0; h<2; h++)
                for(int g =0; g<3; g++){
                    label[h][g] = new JButton("panel 2");
                    p2.add(label[h][g]);}
            JButton im = new JButton("imprimir");
            pen = new JTextField();
            pen.setPreferredSize(new Dimension(40, 20));
            p3.add(pen);
            im.addActionListener(new ActionListener() 
                {
                public void actionPerformed(ActionEvent eNuevo) 
                    {
                    String d = pen.getText();
                    System.out.println(d);
                    PrintUIWindow impr;
                    if(d=="1")
                        impr = new PrintUIWindow(p1);
                    
                    if(d=="2")
                        impr = new PrintUIWindow(p2);}});
            p3.add(im);
            f.setLayout(new BorderLayout()); 
            f.add(p1, BorderLayout.NORTH);
            f.add(p3, BorderLayout.SOUTH);
            f.add(p2, BorderLayout.CENTER);
            f.pack();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(500, 150);
            f.setVisible(true);
            }
        }

  5. #5
    Join Date
    Aug 2011
    Location
    Panamá
    Posts
    595
    Post Thanks / Like
    Rep Power
    1324

    Default

    aquí está, basado en el ejemplo de la página que te coloqué
    PHP Code:
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import javax.swing.JPanel;

    public class 
    Impresion implements Printable {

        private 
    JPanel componente//Cualquier Componente
        
    private double escalaXescalaY;

        public 
    Impresion(JPanel panelUnodouble escalaxdouble escalay) {
            
    componente panelUno;
            
    escalaX escalax;
            
    escalaY escalay;
        }

        public 
    int print(Graphics graficarPageFormat pageFormatint pageIndex) {
            if (
    pageIndex 0) {
                return 
    NO_SUCH_PAGE;
            }

            
    Graphics2D graficar2D = (Graphics2Dgraficar;

            
    graficar2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
            
    graficar2D.scale(escalaXescalaY);

            
    componente.printAll(graficar2D);

            return 
    PAGE_EXISTS;
        }


    PHP Code:
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.print.Book;
    import java.awt.print.PrinterJob;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class 
    Principal {

        public static 
    void main(String[] args) {
            final 
    JPanel panel = new JPanel();
            
    JButton boton = new JButton("Aceptar");
            
    boton.addActionListener(new ActionListener() {

                @
    Override
                
    public void actionPerformed(ActionEvent e) {
                   
    imprimir(panel);
                }
            });
            
    JFrame frame = new JFrame();
            
    JTextField text = new JTextField("Texto escrito");
            
            
    panel.add(boton);
            
    frame.setSize(300300);
            
    panel.add(text);
            
            
    frame.add(panel);
            
            
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
    frame.setVisible(true);
        }

        public static 
    void imprimir(JPanel panel) {
            
    PrinterJob printJob PrinterJob.getPrinterJob();

            
    Book libro = new Book();
            
    libro.append(new Impresion(panel0.90.9),
                    
    printJob.defaultPage());
            
    printJob.setPageable(libro);

            if (
    printJob.printDialog()) {
                try {
                    
    printJob.print();
                } catch (
    Exception PrinterException) {
                    
    JOptionPane.showMessageDialog(nullPrinterException.getMessage());
                }
            }
        }


  6. #6
    Join Date
    Aug 2011
    Posts
    21
    Post Thanks / Like
    Rep Power
    0

    Default

    muchas gracias arielB. ya he hecho pruebas y perfecto. voy a implementarlo en mi código principal. Donde surjan preguntas, te contactaré muchas gracias. De paso cuento que soy nuevo y he recibido mucha ayuda de forodejava y de java-forums, he querido retribuirle a la comunidad ayudando también, pero no he encontrado algo en lo que realmente pueda hacerlo. Muchas gracias.

  7. #7
    Join Date
    Aug 2011
    Location
    Panamá
    Posts
    595
    Post Thanks / Like
    Rep Power
    1324

  8. #8
    Join Date
    Aug 2011
    Posts
    21
    Post Thanks / Like
    Rep Power
    0

    Default

    Cómo puedo imprimir horizontalmente y en carta? cuando sale la ventana Imprimir, en propiedades elijo Horinzontal y carta, pero como ahora no tengo impresora conectada, pues entonces lo guardo, pero lo guarda vertical, cómo puedo modificarlo, porque desde la ventana no lo hace.

  9. #9
    Join Date
    Aug 2011
    Posts
    21
    Post Thanks / Like
    Rep Power
    0

    Default

    He pegado esto en "imprimir" de "principal":

    Code:
    PageFormat pageFormat = new PageFormat();
            pageFormat=printJob.pageDialog(pageFormat);
    Ahora me sale la ventana para configurar hoja y orientación, pero cuando guardo el xps lo veo aún vertical.

  10. #10
    Join Date
    Aug 2011
    Location
    Panamá
    Posts
    595
    Post Thanks / Like
    Rep Power
    1324

    Default

    No ha encontrado la
    respuesta aquí?
    Regístrate, preguntar y
    obtener una respuesta
    adecuada en cuestión de minutos!


    Un registro de minutos: clic

    Sin publicidad para los miembros!
    si, es porque al crear el objeto de tipo PageFormat solo se le está colocando los valores a las ventanidas pero al momento que se le dice que imprima se le está pasando el valor por defecto

    PHP Code:
    libro.append(new Impresion(panel0.90.9),
                    
    printJob.defaultPage()); 
    y debe quedar así

    PHP Code:
    libro.append(new Impresion(panel0.90.9),
                    
    pageFormat); 

    final

    PHP Code:
    PrinterJob printJob PrinterJob.getPrinterJob();
            
    PageFormat pageFormat = new PageFormat();
            
            
    pageFormat.setOrientation(PageFormat.LANDSCAPE);
            
            
    pageFormat printJob.pageDialog(pageFormat);

            
    Book libro = new Book();
            
    libro.append(new Impresion(panel0.90.9),
                    
    pageFormat);
            
            
    printJob.setPageable(libro);

            if (
    printJob.printDialog()) {
                try {
                    
    printJob.print();
                } catch (
    Exception PrinterException) {
                    
    JOptionPane.showMessageDialog(nullPrinterException.getMessage());
                }
            } 
    Last edited by arielb; 11-08-2011 at 16:19.

Page 1 of 2 12 LastLast

Similar Threads

  1. impresion en java con impresora termica BIXOLON
    By spro80 in forum Java avanzado
    Replies: 8
    Last Post: 15-06-2011, 18:53
  2. ayuda con impresora y java
    By erick22 in forum Netbeans
    Replies: 1
    Last Post: 04-12-2010, 03:48
  3. como selecciono una impresora
    By andru in forum Java Básico
    Replies: 0
    Last Post: 16-10-2010, 18:30
  4. Ireports e impresora de tickets
    By whites in forum Java Básico
    Replies: 0
    Last Post: 10-09-2010, 17:58
  5. impresora usb ts7800 y JAVA
    By blasata in forum Java Básico
    Replies: 0
    Last Post: 01-11-2009, 12:25

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •