Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790

    stampare componenti di un pannello[java]

    dovrei ottenere la stampa su carta del contenuto di un JPanel...cm posso fare?

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

    Re: stampare componenti di un pannello[java]

    Originariamente inviato da Metflar
    dovrei ottenere la stampa su carta del contenuto di un JPanel...cm posso fare?
    Se può esserti utile, ecco un programmino di esempio che ho appena scritto che stampa l'intero frame.

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.print.*;
    import javax.swing.*;
    
    public class PrintTestFrame extends JFrame implements ActionListener, Printable
    {
        private PrinterJob job;
        private JButton buttonPrint;
    
        public PrintTestFrame ()
        {
            super ("Print Test");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (300, 300);
    
            buttonPrint = new JButton ("PRINT");
            buttonPrint.addActionListener (this);
    
            add (buttonPrint, BorderLayout.SOUTH);
    
            job = PrinterJob.getPrinterJob ();
            job.setPrintable (this);
        }
    
        public void actionPerformed (ActionEvent ae)
        {
            if (job.printDialog ())
            {
                try {
                    job.print ();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog (this, "Errore");
                }
            }
        }
    
        public int print (Graphics g, PageFormat pageFormat, int pageIndex)
        {
            if (pageIndex > 0)
                return NO_SUCH_PAGE;
    
            double imageableWidth = pageFormat.getImageableWidth ();
            double imageableHeight = pageFormat.getImageableHeight ();
    
            double frameWidth = getWidth ();
            double frameHeight = getHeight ();
    
            double scale = imageableWidth / frameWidth;     // Modo "Fit width"
    
            Graphics2D g2d = (Graphics2D) g;
            g2d.translate (pageFormat.getImageableX (), pageFormat.getImageableY ());
            g2d.scale (scale, scale);
    
            printAll (g);       // Invoca printAll sul frame (this)
    
            return PAGE_EXISTS;
        }
    
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable ()
            {
                public void run ()
                {
                    PrintTestFrame f = new PrintTestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    Se hai una stampante virtuale che stampa su PDF (tipo PDFCreator o simile), prova a fare la stampa su PDF e visualizzalo, così capisci meglio come fa la stampa.

    Nota che per il ridimensionamento ho usato un "fit width", in pratica per calcolare il fattore di scala mi baso solo sulla larghezza del frame e la "spiattello" su tutta la larghezza dell'area stampabile.

    È chiaro che se si vogliono fare dei margini, rotazioni, altri modo di scalatura ... beh, è tutto da fare e calcolare.
    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 L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    grazie andbin sono riuscito ad adattarlo per il pannello

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.