2017-02-03 9 views
0

페인트 방법이이 방법으로 작동하지 않는 이유는 무엇입니까? 그러나 두 번째 방법으로 작동하는 이유는 무엇입니까?왜 페인트가 작동하지 않습니까?

첫 번째 방법 :

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 클래스에서는 페인트 메서드가 재정의됩니다. 당신의 인스턴스는 Ex 클래스입니다. 그래서 당신이 길 2로 갈 때 Ex 클래스의 paint 메소드를 호출하고 있습니다. 따라서 그것은 작동하고 있습니다.

웨이 1을 사용하면 참고 자료와 인스턴스가 모두 JFrame이므로 수퍼 클래스 (예 : JFrame)의 페인트 메소드가 호출됩니다. 이 Ex 클래스의 paint 메소드를 호출하려면 Instance가 해당 클래스에만 있어야하며, 경우에 따라 하위 클래스 여야합니다.

는 JFrame의와 예 클래스의 인스턴스의 참조가됩니다

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

을보십시오. 그래서 페인트가 불려질 것이고 완벽하게 잘 작동 할 것입니다.