2014-11-22 8 views
0

this 비디오 drawing() 메서드가 주 클래스에서 호출됩니다. main 메소드에서 drawing()을 제거하면 여전히 모양을 그립니다. 어떻게 이런 상황을 피할 수 있습니까?페인트를 사용하여 Java paintComponent를 호출하는 방법

모양 클래스 :

import java.awt.*; 
import javax.swing.*; 
public class shapes{ 
public static void main(String[] args){ 
    JFrame frame = new JFrame("Test"); 
    frame.setVisible(true); 
    frame.setSize(400,200); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    draw object = new draw(); 
    frame.add(object); 

    object.drawing(); 
    } 

} 

그리기 클래스 :

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

public class draw extends JPanel{ 
public void drawing(){ 
    repaint(); 
} 
public void paintComponent(){ 
    super.paintComponent(g); 
    g.setColor(Color.BLUE); 
    g.fillRect(10,15,100,100); 
    } 
} 
+0

게시물을 변경했습니다. – TupcuFikret

답변

2

코드 몇 가지 사소한 문제가있다,하지만 난 그게 데모 목적을 위해 단지 작은 조각 있다고 가정합니다. 자세한 내용은 Performing Custom Painting을 참조하십시오.

사실,이 튜토리얼은 또한 당신의 질문에 대답,하지만 그것을 요약 :

paintComponent 메소드가 자동으로 호출됩니다 구성 요소가 다시 그려해야 할 때마다, "운영 체제". repaint()에 대한 호출은 가능한 한 빨리 paintComponent에 다시 전화하도록 운영 체제에 지시합니다. 그러므로 repaint()으로 전화를 걸어 가능한 한 빨리 화면에 캔이 나왔는지 확인할 수 있습니다.

특정 페인팅 작업을 명시 적으로 활성화/비활성화하려는 경우 paintComponent이 호출되지 않도록하여 영향을 줄 수 없습니다. 아무튼 호출됩니다. 대신 무언가를 칠할 것인지 아닌지를 나타내는 플래그 또는 상태를 소개합니다. 당신의 예에서

,이는 은 대략 다음과 같이 수행 할 수 수 :

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

public class Draw extends JPanel{ 
    private boolean paintRectangle = false; 

    void setPaintRectangle(boolean p) { 
     paintRectangle = p; 
     repaint(); 
    } 

    @Override 
    public void paintComponent(){ 
     super.paintComponent(g); 

     if (paintRectangle) { 
      g.setColor(Color.BLUE); 
      g.fillRect(10,15,100,100); 
     } 
    } 
} 

그런 다음 사각형이 그려진 여부를해야하는지 여부를 나타 내기 위해 setPaintRectangle 메서드를 호출 할 수 있습니다.

+0

감사합니다 youuuuuuuuuuuuuuuu – TupcuFikret