質問: 0; rectNumber < board.isList(); rectNumber ++){ if(color[rectNumber].equals("red")){ g.setColor(Color.red); }else if(color[rectNumber].equals("blue")){ g.setColor(Color.blue); }else if(color[rectNumber].equals("yellow")){ g.setColor(Color.yellow); }else if(color[rectNumber].equals("gray")){ g.setColor(Color.gray); } g.fillRect(x[rectNumber],y[rectNumber],w[rectNumber],h[rectNumber]); } } } ``` ### 試したこと repaint();の後に、Thread.sleep(10000);を追加して時間の間隔を開けましたが、 結果は変わりませんでした。
回答: まず最初にプログラミングの大前提について提案したいことがあります。アプレットによるGUIはやめることをお勧めします。質問者さんの目的にもよりますが ・JavaによるスタンドアロンのGUIアプリケーションを作ってみる => swingないしはJavaFXを学ぶことをお勧めします。 ・Webブラウザー上でGUIアプリケーション的なものを作ってみる => HTMLとJavaScriptを学ぶことをお勧めします。 ・Java(的な言語)を用いて簡単にGUIアプリケーションを作ってみる => Processingをお勧めします。 さて、Applet(のサンプルとしてよくあるプログラムコード)に最も近いのはswingライブラリーによるスタンドアロンアプリケーションですのでそれを用いた例で本件についてコメントしてみますと・・・ swingのアプリケーションはイベントディスパッチ方式という仕組みで動いています。 ``` swing内部 | <---- ユーザーの操作により発生するイベント | ----> そのイベントの処理をするハンドラーメソッド <---- | <---- 時間経過により発生するイベント ----> そのイベントの処理をするハンドラーメソッド <---- | ... ``` こんなふうにプログラムの主制御はswing内部のあるメソッドが司っており、これをアプリケーションに書いたどこかのメソッドで以下のようなことをしようとしても 例1: ``` swing内部 -----> どこかのメソッド | ----> repain的な何か(A1) ----> repain的な何か(A2) <---- + | (B) -> 再描画される(paintが呼ばれる) ... ``` (B)の時点までは実際の描画は行われません。(A1),(A2)では「次にswing内部に戻った時に再描画が必要であるということを覚えておくこと」しかできないのです。 なるべく即座にそれが反映されるようにするためにはswingを暇な状態にしてやらねばなりません。暇な状態というのは前述したevent-dispatch-loopに「戻る」ことを意味します。つまり(A1)で指示したrepaintの効果(再描画)を速やかに得たいなら(A1)をした後即座にswingへ戻らねばなりません。 例2: ``` swing内部 -----> どこかのメソッド | ----> repain的な何か(A1) <----- + (B) -> 再描画される(paintが呼ばれる) | ------> どこかのメソッド ----> repain的な何か(A2) <---- + (B) -> 再描画される(paintが呼ばれる) ... ``` 例2のようにするには「どこかのメソッド」がしかるべきタイミングでswing内部から「呼び出してもらう」ことが必要です。典型的には「どこかのメソッド」はあるイベントにより起動されるハンドラーメソッドとして作る必要があります。ごく短い時間に連続してイベントを発生するにはjavax.swing.Timerなどのクラスを用いるとよいでしょう。 ただ、あなたがスレッドプログラミングを学ぶと例1に近い感覚でプログラミングすることもできます。でもそれを例2のようなswingのevent-dispatch-loop方式でのプログラミングをよく把握しないままやっても正しいプログラミングは難しいと思います。まずは例2の制御方式を学ぶことをお勧めします。 ご質問のコードは一部の抜粋なのでどういう制御をしようとしているかがはっきりわかりません。それがもう少し(充分短いコードで)提示されれば具体的な制御案のアドバイスが得られると思います。