JAVA使用Printable打印方法

时间:2015-05-18 16:17:06

标签: java

我发现了一个有用的代码,但我不明白它的两个方面。第一个是if (page > 0)。那是什么意思 ?而且在这里它应该打印job.print();。为什么在没有任何参数的情况下调用此方法而不是我之前创建的这个? :public int print(Graphics g, PageFormat pf, int page)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.print.*;

public class HelloWorldPrinter implements Printable, ActionListener {


    public int print(Graphics g, PageFormat pf, int page) throws
                                                        PrinterException {

        if (page > 0) {   //Here
            return NO_SUCH_PAGE;
        }



//this one
        System.out.println(pf.getWidth());

        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());


        g.drawString("Hello world!", 100, 100);


        return PAGE_EXISTS;
    }

    public void actionPerformed(ActionEvent e) {
         PrinterJob job = PrinterJob.getPrinterJob();
         job.setPrintable(this);
         boolean ok = job.printDialog();
         if (ok) {
             try {
                  job.print();  //Here
             } catch (PrinterException ex) {

             }
         }
    }

    public static void main(String args[]) {

        UIManager.put("swing.boldMetal", Boolean.FALSE);
        JFrame f = new JFrame("Hello World Printer");
        f.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        JButton printButton = new JButton("Print Hello World");
        printButton.addActionListener(new HelloWorldPrinter());
        f.add("Center", printButton);
        f.pack();
        f.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:1)

  

第一个是if(page> 0)。那是什么意思 ?

打印可以包含多个页面 - PrinterJob不知道要打印多少页面,因此它会调用print实施的Printable方法,直到它被告知要执行所以(例如返回NO_SUCH_PAGE)。传递给print实现的参数之一(例如page)会针对每个页面递增,并指示要打印的当前页码。因此,此条件将打印限制为单页。

  

此处还应该打印job.print(); 。为什么没有任何参数调用此方法而不是我之前创建的那个?

您首先在print上调用PrinterJobPrinterJob然后创建变量,然后传递给您的print实施(有时多次,具体取决于页面) - 所以你间接调用Printable实现(例如3参数print方法)。

Oracle值得深入阅读printing tutorial,可能会进一步回答您的问题。

答案 1 :(得分:0)

Q1:if (page > 0)。那是什么意思 ? - 这确保仅打印第一页。由于您使用的是Printable,而不是Pageable,因此无法知道要打印的页数。

Q2:还在这里打印job.print(); - 它应该调用job.print,将打印作业发送到打印机。在您的情况下,在按钮上单击

问题3:为什么在没有任何参数的情况下调用此方法而不是我之前创建的这个? - 这是两个不同的类和对象。您在PrinterJob上调用print(),并调用您的Printable打印方法来打印页面。在线:job.setPrintable(this);了解如何回复您指定的打印方法