- ベストアンサー
swing初心者です
swingを使って簡単なアプレットを作ったのですが、ボタンの表示のタイミングが妙です。ボタンが起動時に表示されず、マウスオーバーして初めて表示されます。 import java.awt.*; import javax.swing.*; public class Test extends JApplet implements Runnable{ public void init(){ getContentPane().add(new JButton("START")); new Thread(this).start(); } public void run(){ try{ while(true){ Thread.sleep(10); } catch(InterruptedException ie){ ie.printStackTrace(); } } } これはどうしてなのでしょうか。初歩的な質問かもしれませんが、どうかご教授お願いいたします。 環境 WindowsXP SP2, java1.5.0_07
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
public void paint(Graphics g){ super.paint(g);//追加 } 親クラスのpaintメソッドを呼んだらちゃんと表示されましたよ。 あっ、No.1なので環境はちょっと違います。 参考になれば。
その他の回答 (2)
- PecoPlus
- ベストアンサー率76% (144/188)
こんばんは。 私の環境とたぶん同じだと思うのですが、 WindowsXP SP2, java version "1.5.0_07" アプレットビューアー、Firefox/1.5.0.8、IE6 SP2で試してみましたが、表示に問題がなく、同じ現象が再現されません。 なにが違うんでしょうかねぇ。
補足
わざわざ調べていただいたのに申し訳ありません、paint()メソッドのオーバーライドを書き忘れていました。これが原因のようです。 import javax.swing.*; public class Test extends JApplet implements Runnable{ ... public void paint(Graphics g){} //追加 } awtでこれに相当するコードを書いても普通にボタンが表示されるのですが、swingだと仕様が違うのでしょうか。
- pcbeginner
- ベストアンサー率46% (261/560)
Win2000,Eclipse3.1.1,J2SE 1.4.2_12 Eclipseから実行しましたが、最初からボタンが表示されました。 参考にならないかもしれませんが。
お礼
ありがとうございます。もう少し調べてみます。
お礼
なるほど、親クラスのpaintメソッドですね!そういえばVC++でも同じ現象で悩んで、スーパクラスの関数呼んだら解決した、なんてことがありましたが、忘れてました。 ありがとうございました!