1. ホーム
  2. java

[解決済み] Graphicsのtranslateメソッド

2022-02-12 11:04:35

質問

最近、こんなものを見つけました。 こちら

 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は、参照元である Graphics2dtranslate はGraphicクラスにあるメソッドです。では、どのように動作するのでしょうか?

どのように解決するのですか?

編集する。 Graphics2DはGraphicsの子クラスなので、translateメソッドはGraphics2DクラスとGraphicsクラスの両方に存在します。Graphicsの子クラスであるため、Graphicsのメソッド(translateを含む)をすべて実装しており、そのため動作しています。

例題のtranslateメソッドは、g2dの原点をpfの原点に移動させるために使われています。

基本的には、g2dの各点をpfの対応する点に平行移動させるよう、プログラムに指示します。

例えば、g2dが(0,0)から始まり、pfが(100,100)から始まるとして、変換後、g2dの(0,100)の点は、同じところから始まっていないので、pfの(0,100)の点、(100,200)になっていることになります。

わかりやすくするのに苦労していますが、もし意味がわからなければ、もっとうまく説明してみるか、答えを完全に削除して、他の人に説明してもらうことにします。