2013-07-16 3 views
0

길이를 입력하고 사각형의 너비를 입력하고 둘레와 면적을 출력하는 Java 프로그램을 작성하고 있습니다. 하지만 지금은 도 그림을 그리는도 마찬가지입니다. 하지만 버튼을 눌렀을 때 어떻게 그리는 지 모르겠습니다.자바에서 버튼을 눌렀을 때 정사각형을 그리는 방법

method paintComponent in class Rectangles cannot be applied to given types; 
required: Graphics 
found: no arguments 

그래서 난 정말 어떻게 해야할지하지 않습니다이 나는 그것이 나에게 말하는 오류를 준다 수행 할 때 때문에

public void paintComponent(Graphics g) { 
    paintComponent(g); 
    g.setColor(Color.blue); 
    g.drawRect(10, 10, 80, 30);  
} 

public void actionPerformed(ActionEvent e) { 
    paintComponent(); 
} 

을? :처럼이 보일 것입니다.

답변

4

아니요. paintComponent으로 직접 전화하지 않아야합니다. 이 메서드는 자동으로 호출되므로 클릭하기 전에 사각형이 그려집니다.

당신은 다시 그리기 요청을 게시 버튼을 클릭 한 것을 표시하고 repaint()를 호출하는 부울 플래그를 사용할 수 있습니다

boolean clicked = false; 

public void paintComponent(Graphics g) { 
    if (clicked) { 
     g.setColor(Color.blue); 
     g.drawRect(10, 10, 80, 30); 
    } 
} 

public void actionPerformed(ActionEvent e){ 
    clicked = true; 
    repaint(); 
} 

또한, 결코는 방법은 정확히 같은 매개 변수를 사용하여 자신을 호출 할 수 있습니다. 이 무한히 종종 같은 함수를 호출합니다

public void paintComponent(Graphics g) { 
    paintComponent(g); 

를 냈다 (또는 스택이 가득 찰 때까지).

괜찮
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

, 그것은 슈퍼 클래스의 paint 메소드를 호출합니다 :

난 당신이 어딘가에 다음 본 것 같아요. 그것은 아마 아무 것도하지 않으므로 그것을 내버려두면 해가되지 않아야합니다.

+0

내가 그것을 할 때, 그것은 나에게'java.lang.StackOverflowError'를 준다. 나는 이유를 모른다. – DLJ

+0

@DLJ 명시 적으로 만들지는 않았지만,'paintComponent'에서'paintComponent (g);'호출을 제거했습니다. 당신은 같은 것을해야한다 :) (또는 그것을'super.paintComponent (g)'와 같이) –

+0

나는 그것을했다 (고마움). 그러나 나는 그것을 볼 수 없다. – DLJ

관련 문제