我有一个带有两个图片标签的 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
}
}
Printable
接口(在java.awt.print
中),并添加指定的print
方法(它类似于paint
——在这里,您可以指定要绘制到打印页面上的组件)。当您想要实际打印面板的内容时,获取一个PrinterJob
实例并调用其setPrintable
方法,传递实现了Printable
的对象。
不过,这只是一个快速概述。我建议查看Sun的打印教程以获取更多信息。
只需编辑并放置您的框架、面板(jPanel1)和按钮(print)的名称。 '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();
}
Component
的多页打印机的代码:https://stackoverflow.com/a/49378186/1273555 - ArchLinuxTux