Stampare JPanel su foglio A5

di il
9 risposte

Stampare JPanel su foglio A5

Salve,
premetto che non ho mai utilizzato java per stampare su foglio.
Ho creato un programma su java, e adesso avrei bisogno di poter stampare un JPanel creato da me su carta.
Quindi cliccando su un pulsante avviare il pannello di stampa e quindi stampare.
Qualcuno può aiutarmi?

Vi ringrazio anticipatamente..

9 Risposte

  • Re: Stampare JPanel su foglio A5

    massimiliano1990 ha scritto:


    Salve,
    premetto che non ho mai utilizzato java per stampare su foglio.
    Ho creato un programma su java, e adesso avrei bisogno di poter stampare un JPanel creato da me su carta.
    Quindi cliccando su un pulsante avviare il pannello di stampa e quindi stampare.
    Qualcuno può aiutarmi?
    Leggi questa discussione che riguarda una richiesta similare, in particolare quel mio ultimo post in cui rimandavo ad un mio esempio.
  • Re: Stampare JPanel su foglio A5

    Grazie per la risposta..
    Avevo già visto questa discussione.
    Ma non riesco comunque a capire come utilizzare la classe Print per un JPanel.
    Ho visto che nella discussione si parla di Container e non di JPanel.
    Qualche idea per implementare una stampa su JPanel?
  • Re: Stampare JPanel su foglio A5

    massimiliano1990 ha scritto:


    Ma non riesco comunque a capire come utilizzare la classe Print per un JPanel.
    Ho visto che nella discussione si parla di Container e non di JPanel.
    JPanel deriva da java.awt.Container. E Container fa appunto quello che dice: è un "contenitore" per N componenti. Il succo non cambia.

    Comunque cambia molto poco: nell'esempio invocavo printAll(g) sul frame (e prendevo getWidth()/getHeight() sempre del frame).
    Nel caso di un JPanel: tuoPanel.printAll(g), tuoPanel.getWidth() ecc...
  • Re: Stampare JPanel su foglio A5

    Non riesco ad adattarlo al mio JPanel.
    Ho creato una classe MyPrint con questo codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.print.*;
    import javax.swing.*;

    public class MyPrint extends JFrame implements /*ActionListener,*/ Printable
    {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private PrinterJob job;
    // private JButton buttonPrint;

    public MyPrint ()
    {
    //super ();

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

    e in un altro JFrame ho un JPanel da stampare, e un Button che crea la Classe MyPrint con cui vorrei lanciare la stampa.

    Tuttavia non funziona.
    Quando clicco sul Button, mi si crea un JFrame vuoto e basta.

    Qualche idea?
  • Re: Stampare JPanel su foglio A5

    massimiliano1990 ha scritto:


    Qualche idea?

    andbin ha scritto:


    Nel caso di un JPanel: tuoPanel.printAll(g), tuoPanel.getWidth() ecc...
  • Re: Stampare JPanel su foglio A5

    Sono riuscito ad implementare tutto.
    Ma mi manca una sola cosa:
    come si fa ad impostare il numero di copie durante la stampa?

    Mi spiego meglio quando lancio la stampa il valore di default delle copie è 1, io vorrei che questo valore fosse sempre 3.
    Che metodo devo utilizzare, e a quale classe devo applicarlo?

    grazie in anticipo!
  • Re: Stampare JPanel su foglio A5

    massimiliano1990 ha scritto:


    come si fa ad impostare il numero di copie durante la stampa?
    PrinterJob ha il metodo setCopies(int copies)
  • Re: Stampare JPanel su foglio A5

    Ottimo funziona tutto.. sei un grande!

    Una cosa..
    ho creato vari Jbutton.. è possibile che se clicco sopra il testo del Jbutton il collegamento (l'evento) non funziona, mentre se clicco sopra il Jbutton (dove non c'è testo) funziona tutto correttamente?

    grazie per tutto!
  • Re: Stampare JPanel su foglio A5

    massimiliano1990 ha scritto:


    è possibile che se clicco sopra il testo del Jbutton il collegamento (l'evento) non funziona, mentre se clicco sopra il Jbutton (dove non c'è testo) funziona tutto correttamente?
    Eh? Mi pare molto strano .... Di norma, no non è possibile nel senso che JButton non fa distinzione su quello. Il pulsante è l'intero pulsante, puoi cliccare dove vuoi entro la sua area.
    Potrebbero esserci questioni di layout ... non so, senza vedere esattamente il codice.
Devi accedere o registrarti per scrivere nel forum
9 risposte