写真付きの2つのラベルが付いたJPanel
があります。 JPanel
のこれらのコンテンツを印刷する必要があります。私を助けてください。 JPanel
にもさまざまなコンポーネントがあるため、このJFrame
のコンテンツのみを印刷するにはどうすればよいですか。ただし、印刷する必要があるのはthisJPanel
だけです。
ありがとう。
これは、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
}
}
これを行う簡単な方法は、Printable
インターフェースを実装することです(Java.awt.print
)そして指定されたprint
メソッドを追加します(これはPaint
と同様に機能します。ここでは、印刷ページに描画するコンポーネントを指定できます)。パネルの内容を実際に印刷する場合は、PrinterJob
インスタンスを取得し、そのsetPrintable
メソッドを呼び出して、Printable
を実装したオブジェクトを渡します。
ただし、これは簡単な概要です。詳細については、 Sunの印刷に関するチュートリアル を参照することをお勧めします。
フレーム、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();
}