web-dev-qa-db-ja.com

1つのJPanelのコンテンツを印刷するにはどうすればよいですか?

写真付きの2つのラベルが付いたJPanelがあります。 JPanelのこれらのコンテンツを印刷する必要があります。私を助けてください。 JPanelにもさまざまなコンポーネントがあるため、このJFrameのコンテンツのみを印刷するにはどうすればよいですか。ただし、印刷する必要があるのはthisJPanelだけです。

ありがとう。

21

これは、Swingコンポーネントを印刷する例です。

public void printComponenet(Component component){
  PrinterJob pj = PrinterJob.getPrinterJob();
  pj.setJobName(" Print Component ");

  pj.setPrintable (new Printable() {    
    public int print(Graphics pg, PageFormat pf, int pageNum){
      if (pageNum > 0){
      return Printable.NO_SUCH_PAGE;
      }

      Graphics2D g2 = (Graphics2D) pg;
      g2.translate(pf.getImageableX(), pf.getImageableY());
      component.Paint(g2);
      return Printable.PAGE_EXISTS;
    }
  });
  if (pj.printDialog() == false)
  return;

  try {
        pj.print();
  } catch (PrinterException ex) {
        // handle exception
  }
}
24

これを行う簡単な方法は、Printableインターフェースを実装することです(Java.awt.print)そして指定されたprintメソッドを追加します(これはPaintと同様に機能します。ここでは、印刷ページに描画するコンポーネントを指定できます)。パネルの内容を実際に印刷する場合は、PrinterJobインスタンスを取得し、そのsetPrintableメソッドを呼び出して、Printableを実装したオブジェクトを渡します。

ただし、これは簡単な概要です。詳細については、 Sunの印刷に関するチュートリアル を参照することをお勧めします。

4
hbw

フレーム、panel(jPanel1)、button(print)の名前を編集して入力するだけです。 「this」はJFrameクラスを参照します(つまり、私のクラスはjavax.swing.JFrameを拡張します)。「this」の代わりにフレームの参照を配置するだけです。

private void PritnActionPerformed(Java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    Toolkit tkp = jPanel1.getToolkit();
    PrintJob pjp = tkp.getPrintJob(this, null, null);
    Graphics g = pjp.getGraphics();
    jPanel1.print(g);
    g.dispose();
    pjp.end();
}
0
YasirAzgar