• 締切済み

JavaのJFrameについて

いまJavaでパソコンに表示する時計を作っています。 JFrameを使っているのですが、ダブルバッファリングで描写しながらSwingのJButtonを使いたいのですが、今自分の知ってる方法だとうまく行きません。 ひとつは、 repaint()関数とpaint()関数を使う方法です。 この方法だとダブルバッファリングのままJButtonと同梱させることができるのらしいですが、表示が滑らかじゃありません。自分的にはFPSが60はほしいです。 もう一つの方法は、graphicsクラスを使って描写する方法です。 こちらはFPS的に問題はないのですがJButtonが置けません。 要点をまとめると、 Graphicsによる描写とSwingのJButtonを同時に一つのwindowでつかいたい、 描写速度をFPS 60程度にしたい です。 書き方が雑なので質問の意図が伝わりにくいかと思いますが、回答よろしくお願いします

みんなの回答

  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.2

paint関数を使うとJButtonを同梱出来ないという点が良くわからないのですが 下記のようにJFrameのpaintをオーバーライドするとチラつくという事ですか? public void paint(Graphics g) { // 時計描画処理 super.paint(g) // JButtonの描画処理を行わせる } とすると、以下の方法でどうでしょうか? ・JFrame>JPanel>JButtonという階層にしてJPanelのpaintComponentに時計描画処理を入れる ・オフスクリーンバッファを用意して、JFrame.paint内ではオフスクリーンバッファの内容を描きだすようにする

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

FPSの件は(私はAppletでやっていますが、repaint()関数とpaint()関数は同じだと思います。) update()で背景色で塗りつぶしてからpaint()を呼んでいますので、 public void update(Graphics g){ paint(g); } で上書きし、 public void paint(Graphics g) { gで受け取って Image offs; Graphics grf; を作り、ここで本来gに対する処理をgrfに対してかき、 g.drawImage(offs,0,0,this); でgに返せばチカチカしません。 run()は使っていらっしゃいますか? public void run() { while(kicker != null) { repaint(); try { Thread.sleep(100); } catch(InterruptedException e) {} } } ここのsleep時間(ミリ秒)を短くすれば早くなります。 run()→repaint()→update()→paint()になります。

関連するQ&A