Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    [JAVA] Stampa JFrame su piu pagine

    help !!!

    sto cercando in rete, ma il tutto mi sembra molto complicato.

    sono riuscito a stampare scopiazzando un codice trovato in giro, il mio problema è che il JFrame che devo stampare contiene un Jscrollpane , quando questo è lungo, mi viene stampato solo la parte del frame che viene visualizzata a monitor....

    esiste qualche modo semplice per stampare per intero il frame ?

    ho letto che bisogna calcolare l'altezza della singola pagina , utilizzare Book ...

    non ci sto capendo nulla

    il frame contiene una serie di JTable .......

    grazie!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Stampa JFrame su piu pagine

    Originariamente inviato da tulkas85
    esiste qualche modo semplice per stampare per intero il frame ?
    Se stampi direttamente il frame ... ovviamente stampi "quello che si vede" ovvero proprio la immagine che si ha a video.
    Forse sarebbe meglio stampare in sequenza i vari singoli componenti ma anche qui non sarebbe banale. È vero che molti dei componenti hanno dei print() più o meno facili da usare ma questi gestisco da soli un intero ciclo di stampa (dialog, stampa ecc...). Quindi poco utile se da farne più insieme.

    Comunque diversi componenti come JTable hanno un getPrintable() che probabilmente facilita le cose (e nota: un Book semplicemente è una collezione di Printable!). In ogni caso è tutto da vedere/provare .... non ho mai fatto queste cose ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Qui c'è una classe che potrebbe fare al caso tuo: http://www.developerdotstar.com/community/node/124

    codice:
    /*
     *Copied from this tutorial:
     * http://www.apl.jhu.edu/~hall/java/Sw...al-Printing...
     * And also from a post on the forums at java.swing.com.
     *My apologies that do not have a link to that post, by my hat goes off
     *to the poster because he/she figured out the sticky problem of paging properly
     *when printing a Swing component. */
    import java.awt.*;
    import javax.swing.*;
    import java.awt.print.*;
    public class PrintUtilities implements Printable {
        private Component componentToBePrinted;
        public static void printComponent(Component c) {
            new PrintUtilities(c).print();
        }
         public PrintUtilities(Component componentToBePrinted) {
             this.componentToBePrinted = componentToBePrinted;
         }
         public void print() {
             PrinterJob printJob = PrinterJob.getPrinterJob();
             printJob.setPrintable(this);
             if (printJob.printDialog())
                  try {
                    System.out.println("Calling PrintJob.print()");
                    printJob.print();
                    System.out.println("End PrintJob.print()");
                  }
                  catch (PrinterException pe) {
                      System.out.println("Error printing: " + pe);
                  }
         }
         public int print(Graphics g, PageFormat pf, int pageIndex) {
             int response = NO_SUCH_PAGE;
             Graphics2D g2 = (Graphics2D) g;
             //  for faster printing, turn off double buffering
             disableDoubleBuffering(componentToBePrinted);
             Dimension d = componentToBePrinted.getSize(); //get size of document
             double panelWidth = d.width; //width in pixels
             double panelHeight = d.height; //height in pixels
             double pageHeight = pf.getImageableHeight(); //height of printer page
             double pageWidth = pf.getImageableWidth(); //width of printer page
             double scale = pageWidth / panelWidth;
             int totalNumPages = (int) Math.ceil(scale * panelHeight / pageHeight);
             //  make sure not print empty pages
             if (pageIndex >= totalNumPages) {
                 response = NO_SUCH_PAGE;
             }
             else {
             //  shift Graphic to line up with beginning of print-imageable region
                 g2.translate(pf.getImageableX(), pf.getImageableY());
                 // shift Graphic to line up with beginning of next page to print
                 g2.translate(0f, -pageIndex * pageHeight);
                 //  scale the page so the width fits...
                 g2.scale(scale, scale);
                 componentToBePrinted.paint(g2); //repaint the page for printing
                 enableDoubleBuffering(componentToBePrinted);
                 response = Printable.PAGE_EXISTS;
             }
             return response;
         }
         public static void disableDoubleBuffering(Component c) {
             RepaintManager currentManager = RepaintManager.currentManager(c);
             currentManager.setDoubleBufferingEnabled(false);
         }
         public static void enableDoubleBuffering(Component c) {
            RepaintManager currentManager = RepaintManager.currentManager(c);
            currentManager.setDoubleBufferingEnabled(true);
           }
    
    }
    L'ho provata, sembra funzionare bene...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    grazie,

    x fr84 l'ho testata, è una versione leggermente diversa di quella che avevo trovato io.
    Riesce a stampare più pagine, ma il problema è che stampa sempre e solo quello che attualmente viene mostrato nel jframe.

    il mio Jframe ha uno scrollpane, quindi se lo metto a tutto schermo e comunque non riesco a visualizzare a video tutto il contenuto, non otterrò mai su carta l'intero output.

    non sò se mi sono spiegato...

    x andbin domani mi concentrerò su questi getprintable vediamo cosa ne esce fuori.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    ok sn riuscito ad utilizzare meglio questa classe suggerita da fr84.

    bastava passare al costruttore anzichè il jframe, il jpanel interno.

    in pratica io incapsulavo il jpanel contenente tutti gli output del programma all'interno di un jscrollpane, quest'ultimo lo aggiungevo al jFrame e poi stampavo il JFrame.

    grazie !!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    Originariamente inviato da tulkas85
    ok sn riuscito ad utilizzare meglio questa classe suggerita da fr84.

    bastava passare al costruttore anzichè il jframe, il jpanel interno.

    in pratica io incapsulavo il jpanel contenente tutti gli output del programma all'interno di un jscrollpane, quest'ultimo lo aggiungevo al jFrame e poi stampavo il JFrame.

    grazie !!
    ehm mica per caso potresti postare il codice in cui passi i parametri, perchè io sn nella stessa situazione, oltre alle textarea ho anche una jtable con la scrollbar. Ho realizzato un bottone pre lanciare la stampa, gli ho associato un evento e nell'evento ho scritto

    PrintUtilities stampa = new PrintUtilities (getContentPane()) ;
    stampa.print();

    quello ke mi stampa è solo ciò che vedo, le righe della tabella ke non si vedono non vengono stampate, come posso fare?

    Grazie....

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    allora ecco qui come facevo...

    Codice PHP:
        JButton jbuttStampa=new JButton("Stampa");
               
    jbuttStampa.addActionListener(new java.awt.event.ActionListener() {
                    public 
    void actionPerformed(java.awt.event.ActionEvent e) {
                        
    PrintUtilities.printComponent(resultSearch.jContentPane);
                    }
                }); 
    resultSearch è la classe nella quale viene istanziato il Jbutton ed estende JFrame, jContentPane è un JPanel che contiene tutto quello che và stampato...

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    e io ho fatto così, solo ke mi stampa la prima pagina e si ferma...

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    ho scoperto ke succede, praticamente io ho la tabella ke è + lunga del conentpane e quindi mi stampa soltanto quello ke vede nel contentpane ke gli passo, il resto non lo riesce a vedere... qualke consiglio?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    usa Jtable e poi questa la metti in un JScrollPane

    lo scrollpane lo setti come contentpane

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.