2009-04-15 111 views
19

我有一個JPanel與兩個標籤與圖片。我需要打印這些JPanel的內容。請幫助我。如何才能打印此JPanel的內容,因爲我的JFrame上也有不同的組件,但我只需要打印JPanel如何打印單個JPanel的內容?

謝謝。

回答

21

以下是打印任何Swing組件的示例。

這會打印稱爲componenet_nameComponent的內容。確保該方法可見。

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

如何在頁面中相應地縮放組件以適合它? – 2011-05-27 05:57:13

4

一個簡單的方法來做到這將是實現Printable接口(在java.awt.print)並添加指定print方法(它的工作原理類似於paint -in在這裏,你可以指定你想繪製到打印頁面的哪些組件)。並且,如果要實際打印面板的內容,請獲取PrinterJob實例並調用其setPrintable方法,傳遞實現了Printable的對象。

雖然這只是一個快速概覽。我建議看看Sun's tutorial on printing以獲取更多信息。

0

只需編輯並把你的框架,面板(JPANEL1)和按鈕(打印)的名稱。 'this'指向JFrame類(即我的類擴展了javax.swing.JFrame),只是放置幀的引用而不是'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(); 
}