- PR -

JFrameのハードコピーの方法?

1
投稿者投稿内容
Z.J.W
会議室デビュー日: 2001/10/30
投稿数: 11
投稿日時: 2001-11-16 19:26
またまたお世話になります。
画面のハードコピーを取りたい。
MyFrame extents JFrame{

***_actionPerformed(e){
PrintJob pj = this.getToolkit().getPrintJob(this, "print1", null);
if( pj != null){
Graphics g = pj.getGraphics( );
this.print(g);
g.dispose( );
pj.end();
}
}
でタイトルバーとか枠が印刷できません。
どうやって画面のハードコピーを取りますか?
有効な手段がありましたらぜひ教えて下さい。
よろしくお願いします。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2001-11-17 12:58
ちょっとひねくれた方法ですが、フレームの中にフレームを表示して、親フレームを印刷すれば子フレーム全体が印刷されます。ただし、JInternalFrameとJDesktopPaneを使用する必要があると思います。

1. 新しいJFrameを生成してJDesktopPaneをaddする
2.印刷したいJFrameをJInternalFrameに変換
3.このJInternalFrameをJDesktopPaneに貼り付ける。(ここで大事なのはサイズをJDesktopPaneよりやや小さめにする)
4.最後に、JDesktopPaneを保持しているJFrameを印刷すればJInternalFrameのタイトルと縁がちゃんと印刷されます。

問題点:

  • わざわざ新しいJFrame、JInternalFrameやJDesktopPaneを作らないといけないため、面倒です。
  • 印刷したいJInternalFrameが親フレームよりもやや小さくないと、ボーダーがちゃんと印刷されない。小さすぎると他のものまで印刷されてしまう。
  • 新しい画面が表示されてしまいます。
  • JInternalFrameのデフォルトL&FがJFrameと違うため、細かい設定が必要。


あまり正攻法じゃないと思いますが、役にたったでしょうか?

[ メッセージ編集済み 編集者: H2 編集日時 2001-11-17 13:01 ]
Z.J.W
会議室デビュー日: 2001/10/30
投稿数: 11
投稿日時: 2001-11-19 10:47
H2さん、レスありがとうございます。
メインフレームの印刷が問題点というとおりで、ハードコピーが取れないです。
そしたら、Javaで表示ウインドウうのカスタム化方法が無いですかな?
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2001-11-19 12:45
UIManager.setLookAndFeel()を使えばフレームのデザインをかえられます。

そうそう、printAll()というメソッドもあるようですが、タイトルバーなどはプリントしてくれませんでした。

さらにひねくれた方法です。Windows上であれば"Print Screen"キーで画面をクリップボードに写せますよね。これは、Windows上にそういったコマンドがあるからですよね。JavaからこのPrint Screenコマンドを呼び出して、クリップボードに移った画像を取り出し、現在のJFrameの場所をサイズを切り取ればフレーム全体が印刷できるような気がします。(注:気がするなんのでできるかどうかはわかりません。)

ひねくれすぎで、プラットフォームに依存しちゃうのでちょっとお勧めできない方法ですけどね。(笑)

[ メッセージ編集済み 編集者: H2 編集日時 2001-11-19 13:23 ]
1

スキルアップ/キャリアアップ(JOB@IT)