2009-04-15 7 views
19

Ho un JPanel con due etichette con immagini. Ho bisogno di stampare questi contenuti dello JPanel. Per favore aiutatemi. Come posso stampare solo questo contenuto di JPanel, poiché anch'io ho componenti diversi sul mio JFrame ma devo solo stampare questoJPanel.Come posso stampare i singoli contenuti di JPanel?

Grazie.

risposta

21

Ecco un esempio per stampare qualsiasi componente Swing.

Stampa il contenuto dello Component chiamato componenet_name. Assicurati che sia visibile per questo metodo.

public void printComponenet(){ 

    PrinterJob pj = PrinterJob.getPrinterJob(); 
    pj.setJobName(" Print Component "); 

    pj.setPrintable (new Printable() {  
    public int print(Graphics pg, PageFormat pf, int pageNum){ 
     if (pageNum > 0){ 
     return Printable.NO_SUCH_PAGE; 
     } 

     Graphics2D g2 = (Graphics2D) pg; 
     g2.translate(pf.getImageableX(), pf.getImageableY()); 
     componenet_name.paint(g2); 
     return Printable.PAGE_EXISTS; 
    } 
    }); 
    if (pj.printDialog() == false) 
    return; 

    try { 
     pj.print(); 
    } catch (PrinterException ex) { 
     // handle exception 
    } 
} 
+2

come è possibile ridimensionare il componente di conseguenza nella pagina in modo che si adatti? –

+1

@Saher hai mai capito come si fa? Grazie –

+0

potresti aggiungere ulteriori spiegazioni (testo)? Si suppone che si debba derivare un JComponent e aggiungere questo metodo o cosa si dovrebbe fare con questo? Grazie. –

4

Un modo semplice per farlo sarebbe che implementa l'interfaccia Printable (in java.awt.print) e aggiungendo il print metodo specificato (che funziona in modo simile a paint -in qui, è possibile specificare quali componenti si vorrebbe disegnare sulla pagina stampata). E quando si desidera stampare effettivamente il contenuto del pannello, ottenere un'istanza PrinterJob e chiamare il suo metodo setPrintable, passando l'oggetto che ha implementato Printable.

Questa è solo una rapida panoramica, però. Consiglierei di dare un'occhiata a Sun's tutorial on printing per ulteriori informazioni.

0

basta modificare e inserire il nome della cornice, del pannello (jPanel1) e del pulsante (stampa). 'this' fa riferimento alla classe JFrame (vale a dire che la mia classe estende javax.swing.JFrame), basta mettere il riferimento del frame invece di 'this'.

private void PritnActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    Toolkit tkp = jPanel1.getToolkit(); 
    PrintJob pjp = tkp.getPrintJob(this, null, null); 
    Graphics g = pjp.getGraphics(); 
    jPanel1.print(g); 
    g.dispose(); 
    pjp.end(); 
} 
Problemi correlati