метод перевода в графике - PullRequest
2 голосов
/ 06 июля 2011

Я недавно просматривал это: здесь

 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, а translate - метод, найденный в классе Graphic.Тогда как это работает?

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Редактировать: Метод translate находится как в классе Graphics2D, так и в классе Graphics, поскольку Graphics2D является дочерним классом Graphics. Будучи потомком Graphics, он реализует все свои методы (включая translate), поэтому он работает.

Метод перевода в вашем примере используется для перемещения исходной точки g2d в исходную точку pf.

По сути, она говорит программе переводить (перемещать) каждую точку из g2d в соответствующую точку pf.

Скажем, g2d начинается в (0,0), а pf начинается в (100,100), после перевода точка g2d (0,100) теперь будет в (100,200), что является точкой PF (0,100), поскольку она не начать с того же места.

Мне трудно объяснить и легко понять, но если вы не понимаете, что я имею в виду, я попытаюсь объяснить это лучше или просто удалю ответ полностью, и пусть кто-то другой объяснит его.

0 голосов
/ 06 июля 2011

Код выглядит так, как будто он взят из java.awt.print.Printable реализации.Предполагается, что это позволяет рисовать контент в объекте Graphics, который установлен на принтере.Вызов translate используется, если PageFormat имеет верхнее / левое поля, поэтому содержимое начинается в области печати PageFormat, а не на 0,0 на бумаге, которая не находится в области печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...