2011-07-06 5 views
2

における方法翻訳: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 (コメント)を理解していません。 Graphics2dおよびtranslateは、Graphicクラスのメソッドです。次にそれはどのように機能しますか?

答えて

3

編集: Graphics2DはGraphicsの子クラスであるため、translateメソッドはGraphics2DクラスとGraphicsクラスの両方にあります。 Graphicsの子であるため、すべてのメソッド(翻訳を含む)が実装されています。そのため、このメソッドが機能します。

例のtranslateメソッドは、g2dの原点をpfの原点に移動するために使用します。

基本的には、g2dからpfの対応するポイントまですべてのポイントを変換(移動)するようプログラムに指示します。

g2dが(0,00)から始まり、変換後にpfが(100,100)から始まり、g2dの(0,100)ポイントは(100,200)になります。これはpfの(0,100)ポイントです。同じ場所で始める。

私はそれをはっきりとわかりやすくしていますが、私が何を意味しているのか理解できない場合は、それを説明したり、回答をすべて削除したり、他の人に説明させてください。

+0

私はどの翻訳方法が使用されているか知っています。あなたは私が尋ねたものに答えなかった! – saplingPro

+0

私はあなたの質問を読んだ後に私の答えを改訂しました。それは今それに答えるか、私は答えを削除する方がいいですか?そうでない場合は、その質問が何を参照するかわからないので、あなたの質問をより明確にするようにしてください。 –

+0

@アダム・スミスありがとう!そして 'page> 0'は何をチェックしますか? – saplingPro

0

コードはjava.awt.print.Printableの実装のようです。これは、プリンタに設定されているGraphicsオブジェクトにコンテンツを描画することになっています。 translate呼び出しは、PageFormatの上端/左端に余白がある場合に使用されるため、印刷可能領域内にない用紙の0,0ではなく、PageFormatの印刷可能領域内でコンテンツが開始されます。

関連する問題