パネルの内容をプリンタに出力する方法
・パネルの印刷メソッド
/**
* グラフを印刷する。
*/
public void printAll(Frame frame, String title) {
PrintJob pjob = getToolkit().getPrintJob(frame, title, null);
if(pjob != null){
// 用紙サイズを求める
Dimension paperDim = pjob.getPageDimension();
double paperWidth = paperDim.getWidth();
double paperHeight = paperDim.getHeight();
// プリンタの設定で用紙が横になっているときは、左マージンと上マージンを入れ替え
if(paperWidth > paperHeight)
{
int temp = LEFT_MARGIN;
LEFT_MARGIN = UP_MARGIN;
UP_MARGIN = temp;
}
paperWidth -= LEFT_MARGIN;
paperHeight -= UP_MARGIN;
// パネルサイズを求める
int panelWidth = panel.getSize().width;
int panelHeight = panel.getSize().height;
// オフスクリーンイメージを作成し、パネルの内容をコピーする
Image image = createImage(panelWidth, panelHeight);
Graphics graph = image.getGraphics();
graph.setColor(Color.white);
graph.fillRect(0, 0, image.getWidth(this), image.getHeight(this));
panel.paint(graph);
// 縮小率算出
double wRatio = 1.0;
double hRatio = 1.0;
double ratio = 1.0;
wRatio = paperWidth / panelWidth;
hRatio = paperHeight / panelHeight;
ratio = ( wRatio < hRatio ) ? wRatio : hRatio;
if(ratio > 1.0) ratio = 1.0;
// プリンタのグラフィックオブジェクト取得
Graphics pg = pjob.getGraphics();
if(pg != null){
// 出力
pg.drawImage(image, LEFT_MARGIN, UP_MARGIN, (int)(panelWidth * ratio), (int)(panelHeight * ratio), this);
pg.dispose();
}
pjob.end();
}
}