2017-02-03 4 views
0

Warum funktioniert die Malmethode nicht so, funktioniert aber auf die zweite Art?Warum Farbe nicht funktioniert?

Erster Weg:

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); 
} 
} 

Zweiter Weg: arbeitet Warum?

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

Siehe auch [Erkennung/Fix für die hängende schließen Klammer eines Codeblocks] (http://meta.stackexchange.com/q/251795/155831) für ein Problem, das ich in dieser Frage beheben musste. Bitte verwenden Sie Code-Formatierung für Code und Code-Snippets, strukturierte Dokumente wie HTML/XML oder Eingabe/Ausgabe. Um dies zu tun, ** wähle den Text aus und klicke auf den '{}' Button oben im Nachrichten-Posting/Editier-Formular. ** –

+0

'JFrame' ist keine Instanz von' Ex' – MadProgrammer

Antwort

3

If:

JFrame frame=new JFrame("Title"); 

Stattdessen lesen:

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

sollte es funktionieren.

3

Wie Ex-Klasse erweitert wird JFrame und Paint-Methode in Ex-Klasse überschrieben. Deine Instanz ist von Ex-Klasse, also ruft sie die Paint-Methode der Ex-Klasse auf, wenn du mit Way 2 gehst. Daher funktioniert sie.

Wenn Sie mit Weg 1 gehen, Ihre Referenz und Instanz sind beide von JFrame, Daher wird es Paint-Methode der Super-Klasse (d. H. JFrame) aufrufen. Wenn diese Paint-Methode der Ex-Klasse aufgerufen werden soll, sollte Instance nur von dieser Klasse sein, in Ihrem Fall von der Kind-Klasse.

Versuchen

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

Dies wird anhand von JFrame und Instanz von Ex-Klasse haben. So wird Farbe aufgerufen und es wird einwandfrei funktionieren.

Verwandte Themen