Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655

    Stampare Jframe contenenti textarea

    Ciao a tutti. Dunque è da un po che sono alle prese con la funzione stampa per la mia applicazione java.

    Sino ad adesso ho utilizzato questa classe :
    codice:
    /*
     *Copied from this tutorial:
     * http://www.apl.jhu.edu/~hall/java/S...ial-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);
           }
    
    }
    recupertata da questo link : http://www.developerdotstar.com/community/node/124.

    Ora però mi sono accorto che essendoci delle Text area nella mia applicazione quando queste vengono riepite da righe/colonne maggiori di quelle visibili, queste non vengono visualizzate.

    In sostanza la classe recuperata è quasi perfetta, se non fosse per questo problema. Ovvero che non riesce a stampare tutto il contenuto di una textarea.

    Qualcuno è mai riuscito a modificarla e quindi renderla perfetta??

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

    Re: Stampare Jframe contenenti textarea

    Originariamente inviato da melmar20
    Ora però mi sono accorto che essendoci delle Text area nella mia applicazione quando queste vengono riepite da righe/colonne maggiori di quelle visibili, queste non vengono visualizzate.

    In sostanza la classe recuperata è quasi perfetta, se non fosse per questo problema. Ovvero che non riesce a stampare tutto il contenuto di una textarea.

    Qualcuno è mai riuscito a modificarla e quindi renderla perfetta??
    Non si può farla "perfetta" se stampi direttamente il frame!!! Perché è logico che stampa solo ed esattamente "quello che vedi nel frame!!".

    Devi cambiare radicalmente approccio, dovresti stampare i singoli dati/componenti. Nota ad esempio che solo da Java 6 JTextArea fornisce un getPrintable().
    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
    Jan 2007
    Messaggi
    655
    con questa risposta, le cose si fanno davvero complicate!!

    Tralasciando l'immensa fatica che dovrei fare per stampare uno alla volta tutti i componenti, non mi è chiaro come io possa fare perché questi vengano si stampati tutti correttamente, ma soprattutto come posso stamparli in modo che questi siano ben visibili e ben ordinati nella pagina??

    Mi spiego meglio, quando stampavo il jframe non avevo di queste preoccupazioni in quanto così come appariva sullo schermo, veniva stampato.

    Ora invece se passo componente per componente al metodo printComponent, questo effettua la stampa senza considerare la posizione delle altre componenti.

    Navigo davvero nel vuoto!!!!

    Qualcuno potrebbe venire in mio soccorso??

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.