2013-12-16 4 views
0

아주 간단한 문제가 있습니다. 이전에 프로젝트를 수행 할 때 비슷한 레이아웃을 사용했습니다.JFrame은 사각형을 그리지 않습니다.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

class q1 
{ 
    public static void main (String Args []) 
    { 
     q1Window showMe = new q1Window(); 
    } 
} 

class q1Window 
{ 
    q1Window() 
    { 
     JFrame window = new JFrame("Tutorial 1"); 
     window.setSize(600,600); 
     window.setVisible(true); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint (Graphics back) 
    { 
     back.setColor(Color.black); 
     back.fillRect(30,30,100,200);   
    } 
} 

이제는 JFrame이 보여 주지만 아무것도 인쇄 할 수 없습니다.

답변

5

모든 클래스에 paint() 메소드를 추가 할 수는 없습니다. Swing 컴퍼넌트에만 paint 메서드가 있습니다.

자세한 내용 및 작업 예제는 Custom Painting의 스윙 튜토리얼 섹션을 참조하십시오.

요약하면 JPanel의 paintComponent() 메서드를 재정의 한 다음 프레임에 패널을 추가해야합니다.

-2

camickr가 지적한 것처럼, paintComponent()을 대신 무시해야하지만 원하는 경우에는이 구성 요소를 paint()으로 대체해야합니다.

이 시도 :

class q1 { 

    public static void main(String Args[]) { 
     q1Window showMe = new q1Window(); 
    } 
} 

class q1Window extends JFrame { 

    q1Window() { 
     setTitle("Tutorial 1"); 
     setSize(600, 600); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint(Graphics back) { 
     back.setColor(Color.black); 
     back.fillRect(30, 30, 100, 200); 
    } 
} 
+2

-1'super.paint'를 호출에 실패 -1,'최상위 컨테이너의 paint'을 무시하고 페인트 체인을 깨는, intial 스레드 – MadProgrammer

+0

말할 것도없고 - 1, 이것은 끔찍한 예입니다. @ bobski, 이것은 프로그래밍하는 법을 배우는 방법이 아닙니다. 기존 코드를 약간만 변경했다고해서 제안을 사용해야한다는 의미는 아닙니다. 적절한 접근법은 이미 주어졌습니다. 여러분이 제공 한 튜토리얼 링크를 읽고 기본을 배우는 것이 좋습니다. – camickr

+0

글쎄, 내가 언급 한 모범 사례 중 어느 것도 사용하지 않았다는 것이 나쁘다. 결코 이것이 권장되는 방법은 아닙니다. 방금이 경우 작동하는 작은 글을 올렸습니다. – victorantunes

관련 문제