java 使用PrinterJob在java swing中按下JButton时如何打印页面?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4529316/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to print a page when a JButton is pressed in java swing using PrinterJob?
提问by prayagupd
I tried the following code AWT but at runtime shows multiple print dialogs repeatedly....
我尝试了以下代码 AWT 但在运行时重复显示多个打印对话框....
package printerjob;
import java.awt.BasicStroke;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
/**
* @author pragX
*/
public class FramePrinterJob extends Frame implements Printable {
public void start(){
add(button);
}
@Override
public void paint(Graphics graphics) {
PrinterJob printerJob=PrinterJob.getPrinterJob();
printerJob.setPrintable(this);
if(printerJob.printDialog()){
try{
printerJob.print();
}catch(PrinterException printerException){
//printerException.printStackTrace();
System.out.println("Error Printing." + printerException);
}
}
}
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
//throw new UnsupportedOperationException("Not supported yet.");
if(pageIndex>=1){
return Printable.NO_SUCH_PAGE;
}
graphics.translate((int) pageFormat.getImageableX(),
(int)pageFormat.getImageableY());
Graphics2D graphics2D=(Graphics2D)graphics;
graphics2D.setStroke(new BasicStroke(4f));
graphics2D.drawLine(20, 20, 20, 120);
graphics2D.drawLine(40, 20, 40, 120);
graphics2D.drawLine(20, 70, 40, 70);
graphics2D.drawLine(60, 70, 60, 120);
graphics2D.drawLine(60, 40, 60, 45);
return Printable.PAGE_EXISTS;
}
public static void main(String args[]) {
Frame frame=new FramePrinterJob();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(){
System.exit(0);
}
});
frame.setSize(300,400);
frame.setVisible(true);
}
}
采纳答案by trashgod
You probably don't want to override the paint()
method of Frame
for this. Instead, invoke the print dialogs in your print button's actionPerformed()
method, as seen in this examplefrom A Basic Printing Program.
您可能不想为此覆盖paint()
方法Frame
。相反,在调用打印按钮的打印对话框actionPerformed()
的方法,如在这个例子从一个基本的打印程序。