2009-04-15 64 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(); 
}