連投ですみません。
コード public class Part01 extends Frame{ /** * メインクラス */ public static void main(String args[]) { new Part01(); } /** * コンストラクタ */ public Part01(){ /**フレームの初期化*/ super("Shooting Game"); //タイトル設定 setBounds(0, 0, 500, 500); //位置、サイズ設定 setVisible(true); //表示設定 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent evt){ System.exit(0); //終了処理 } }); /**キャンバスの生成*/ MyCanvas myCanvas = new MyCanvas(); add(myCanvas); //フレームにキャンバスを追加 //スレッドを作成 myCanvas.initThread(); } }
コード public class MyCanvas extends Canvas implements Runnable{ Image imageBuffer; Graphics graphicsBuffer; /** * コンストラクタ */ public MyCanvas(){ } /** * アップデート処理 */ @Override public void update(Graphics g){ paint(g); } /** * 描画処理 */ @Override public void paint(Graphics g){ System.out.println("3"); g.drawImage(imageBuffer, 0, 0, this); } /** * メインループ */ @Override public void run(){ System.out.println("1"); //オフスクリーンバッファ作成 imageBuffer = createImage(500, 500); graphicsBuffer = imageBuffer.getGraphics(); while(true){ System.out.println("2"); graphicsBuffer.setColor(Color.red); graphicsBuffer.fillRect(0, 0, 500, 500); repaint(); try{ Thread.sleep(500); } catch(InterruptedException e){ } } } /** * スレッド */ public void initThread(){ Thread thread = new Thread(this); thread.start(); } }
上のプログラムはフレームにキャンバスを貼り付けて、そこに四角形を描くプログラムです。
ですがこれを実行してもフレームが出てくるだけで赤い四角形は描かれませんでした。
コンソールで確認したところ1は1回表示されて2はちゃんとループしていましたが、3は1回も表示されませんでした。
paintメソッドはプログラムを実行すると自動的に1回呼び出されると認識していましたが違うのでしょうか?
ちなみにpaintメソッドにsuper.paint(g)を書いても四角形は描画されませんでした。
またプログラムを実行して現れたフレームをいじると赤い四角形が描画され、コンソールの方でも、いじったときからですが2と3がループしました。
この原因はpaintメソッドが初めに呼ばれていないからだと思いますがどうしたら呼ばれるようになるのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/06 00:39
2016/10/06 01:43
2016/10/06 07:39