2012-03-26 13 views
1

Java Swingで印刷する方法を学び始めたばかりです。この質問が非常に素朴であれば、私にご負担ください。多くのJPanelsを印刷する

私はJLabelを含む他のJPanelを含む複数のJPanelでかなり複雑なレイアウトをしています。私は何とかプリンタでこれをうまく印刷したい。

私は、印刷されたページを表すGraphics2Dオブジェクトに「ペイント」することができますが、各オブジェクトを個別に配置する必要があることは知っています。私はSwingレイアウトマネージャを使ってページ上のアイテムをレイアウトすることができるようにしたいと考えています。これを行う1つの方法は、jp.paint(g2d)を呼び出すことです.jpはJPanel、g2dは印刷されたページを表すGraphics2Dオブジェクトです。しかし、私が見る限り、これは画面上に実際に見えるJPanelを印刷するだけです。 JPanelが表示されていない場合、JPanelは印刷されません。

JPanelをコンピュータ画面に表示させずに(かなり複雑な)JPanelをレイアウトしてプリンタに送る方法はありますか?

ここで私は間違ったトラックにいますか?

+1

これがお手伝いします - > http://docs.oracle.com/javase/tutorial/2d/printing /gui.html – Java42

+0

いいえ、私が見る限り、目に見えるオブジェクトを印刷することについて話します。私は目に見えないオブジェクトを印刷したい。 – oz1cz

+0

印刷するパネルを作成するときにpack()を実行しますが、setVisible(true)を設定しないと、パネルは画面に表示されずに印刷されます。試してみる。 – Java42

答えて

1

JPanelを非表示にして印刷する方法の例を削除しました。

public class TestPrinterSmall { 
static class JPanelPrintable extends JPanel implements Printable { 
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException { 
     if (page > 0) return Printable.NO_SUCH_PAGE; 
     printAll(g); 
     return Printable.PAGE_EXISTS; 
    } 
}; 
private static void printIt(Printable p) throws PrinterException { 
    PrinterJob job = PrinterJob.getPrinterJob(); 
    job.setPrintable(p); 
    if (job.printDialog()) job.print(); 
}  
public static void main(String args[]) throws PrinterException { 
    final JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    f.setSize(400,400); 
    final JPanelPrintable j = new JPanelPrintable(); 
    j.setLayout(new BorderLayout()); 
    j.add(new JButton("1111"),BorderLayout.NORTH); 
    j.add(new JButton("2222"),BorderLayout.SOUTH);    
    f.add(j);f.repaint();f.pack(); 
    //f.setVisible(true); 
    printIt(j); 
} 
} 

出力:

(nothing) 

プリンタ:

enter image description here

+0

それは完璧です、チャック。なぜ私のコードがうまくいかないのかまだ分かりませんが、少なくとも私は私が扱えるものがあります。どうもありがとうございました。 – oz1cz

関連する問題