【发布时间】:2010-10-19 12:23:09
【问题描述】:
我有一个JPanel,带有两个带有图片的标签。我需要打印JPanel 的这些内容。请帮帮我。我怎样才能只打印这个JPanel 的内容,因为我的JFrame 上也有不同的组件,但我只需要打印这个 JPanel。
谢谢。
【问题讨论】:
我有一个JPanel,带有两个带有图片的标签。我需要打印JPanel 的这些内容。请帮帮我。我怎样才能只打印这个JPanel 的内容,因为我的JFrame 上也有不同的组件,但我只需要打印这个 JPanel。
谢谢。
【问题讨论】:
这是一个打印任何 Swing 组件的示例。
public void printComponenet(Component component){
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());
component.paint(g2);
return Printable.PAGE_EXISTS;
}
});
if (pj.printDialog() == false)
return;
try {
pj.print();
} catch (PrinterException ex) {
// handle exception
}
}
【讨论】:
Component 的多页打印机
只需编辑并输入框架名称、面板(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();
}
【讨论】:
一个简单的方法是实现Printable 接口(在java.awt.print 中)并添加指定的print 方法(它的工作方式类似于paint——在这里,您可以指定您要使用的组件想要在打印的页面上绘图)。而当你想实际打印面板的内容时,获取一个PrinterJob实例并调用它的setPrintable方法,传递实现Printable的对象。
不过,这只是一个快速概述。我建议您查看Sun's tutorial on printing 了解更多信息。
【讨论】: