2017-02-03 4 views
0

なぜペイント方法はこのようには機能しませんが、2番目の方法で動作しますか?なぜペイントが機能しないのですか?

最初の方法:

public class Ex extends JFrame{ 

public static void main(String args[]){ 
    JFrame frame=new JFrame("Title"); 
    frame.setVisible(true); 
    frame.setSize(800, 600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    g.drawString("HEllo", 500, 500); 
} 
} 

第二の方法:なぜ働いていますか?

public class Ex extends JFrame{ 
{ 
    this.setTitle("Title"); 
    this.setSize(800, 600); 
    this.setVisible(true); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public static void main(String args[]){ 
    new Ex(); 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    g.drawString("HEllo", 500, 500); 
} 
} 
+0

この問題で修正しなければならなかった問題については、[コードブロックのぶら下げ括弧の検出/修正](http://meta.stackexchange.com/q/251795/155831)も参照してください。コードやコードスニペット、HTML/XMLや入出力などの構造化文書にはコードの書式を使用してください。これを行うには、テキストを選択し、メッセージの投稿/編集フォームの上部にある「{}」ボタンをクリックしてください。** –

+0

'JFrame'は' Ex'のインスタンスではありません – MadProgrammer

答えて

3

場合:

JFrame frame=new JFrame("Title"); 

が代わりに読んで:

JFrame frame=new Ex(); // we want an Ex, not a JFrame! 
frame.setTitle("Title"); 

それは動作するはずです。

3

ExクラスはJFrameを拡張しており、Exクラスではpaintメソッドがオーバーライドされています。あなたのインスタンスはExクラスですので、2と一緒に行くとExクラスのpaintメソッドを呼び出しています。それゆえ、それは動作しています。

あなたがウェイ1と一緒に行くと、参照とインスタンスの両方がJFrameであるため、スーパークラス(つまりJFrame)のペイントメソッドが呼び出されます。このExクラスのペイントメソッドを呼び出すには、Instanceはそのクラスのみ、つまりあなたの場合は子クラスである必要があります。

はJFrameのと例クラスのインスタンスの参照を持つことになります

JFrame frame=new Ex(); 
frame.setTitle("Title"); 

この

を試してみてください。だからペイントされ、それは完全に正常に動作します。

関連する問題