簡體   English   中英

JAVA使用可打印的打印方法

[英]JAVA using Printable print method

我找到了一個有用的代碼,但是我不明白其中的兩件事。 第一個是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);
    }
}

第一個是if(page> 0)。 這意味着什么 ?

打印可以包含多頁PrinterJob不知道要打印多少頁,因此它將被告知您的Printable實現的print方法,直到被告知要這樣做(例如,返回了NO_SUCH_PAGE )。 傳遞給您的print實現(例如page )的參數之一對於page都會增加,並指示當前正在打印的頁碼。 結果,此條件將打印限制為單頁。

而且在這里它應該打印job.print(); 為什么它調用此方法時不帶任何參數,而不是我之前創建的這個方法?

您首先在PrinterJob上調用print ,然后PrinterJob創建變量,然后將這些變量傳遞給您的print實現(有時多次,具體取決於頁面數)-因此,您將間接調用您的Printable實現(例如3參數print方法) 。

Oracle有一個很棒的印刷教程,值得深入閱讀,它可能會進一步回答您的問題。

問題1: if (page > 0) 這意味着什么 ? -這樣可確保僅打印第一頁。 因為您使用的是Printable而不是Pageable ,所以它不知道要打印多少頁。

Q2:還有這里應該打印job.print(); -它應在要將打印作業發送到打印機的位置調用job.print。 您的情況下,在按鈕上單擊

問題3:為什么調用此方法時不帶任何參數,而不是我之前創建的此參數? -這是兩個不同的類和對象。 您正在PrinterJob上調用print(),后者會回調您的Printable打印方法以打印頁面。 在線: job.setPrintable(this); 這就是知道如何回調您指定的打印方法的方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM