我最近提到了here
public int print(Graphics g, PageFormat pf, int page) throws
PrinterException {
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
/* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY()); // line 2
g.drawString("Hello world!", 100, 100);
/* tell the caller that this page is part of the printed document */
return PAGE_EXISTS;
}
我不理解此代码段中的第2行(注释)。 (g2d.translate(pf.getImageableX(), pf.getImageableY());)
g2d是Graphics2d
和{{的引用1}}是在Graphic类中找到的方法。那怎么工作呢?
答案 0 :(得分:3)
编辑:由于Graphics2D是Graphics的子类,因此可以在Graphics2D类和Graphics类中找到translate方法。作为Graphics的孩子,它实现了它的所有方法(包括翻译),这就是它工作的原因。
示例中的translate方法用于将g2d的原点移动到pf的原点。
基本上,它的作用是告诉程序将每个点从g2d转换(移动)到pf的对应点。
让我们说g2d从(0,0)开始,pf从(100,100)开始,在翻译之后,g2d的(0,100)点现在是(100,200),这是pf的(0,100)点,因为它没有从同一个地方开始。
我很难说清楚易懂,但如果你不理解我的意思,我会尝试更好地解释它,或者只是完全删除答案,让其他人解释。< / p>
答案 1 :(得分:0)
代码看起来像来自java.awt.print.Printable
实现。这应该将内容绘制到设置为打印机的Graphics对象。如果PageFormat具有上边距/左边距,则使用translate
调用,因此内容在PageFormat的可打印区域内开始,而不是在纸张上的0,0开始,这不在可打印区域内。