在Graphics中翻译方法

时间:2011-07-06 05:13:51

标签: java printing

我最近提到了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类中找到的方法。那怎么工作呢?

2 个答案:

答案 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开始,这不在可打印区域内。