[英]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.