2013-04-30 2 views
0

GraphJFrame에 개체가 추가됩니다. 이 객체는 그래프 플롯이 뒤 따르는 축을 그립니다.paint()가 직접 호출 될 때 요소가 그리지 않지만 내용 창에 추가 될 때 그리기 요소

this.getContentPane().add(new Graph()); 

축 및 기능 무승부 모두 : 객체의 paint()을 사용하여 JFrame을 통해 암시 적으로 호출됩니다. 그러나 함수가,

Graph g = new Graph(); 
g.paint(this.getContentPane().getGraphics()); 

축이 그리하지 않습니다 그러나, paint() 방법은 명시 적으로 통해 호출 될 때. 다음과 같이 객체 Graph에서

public GraphFrame() { 
    super(""); 
    setSize(800, 800); 
    setVisible(true); 
    //One of the above blocks is called here 
} 

기능 paint은 다음과 같습니다 다음 JFrame의 전체 생성자는 다음과 같다 구성 요소가 칠 때 암시 적으로 호출 할 때

public void paint(Graphics w) { 
    w.setColor(Color.WHITE); 
    w.fillRect(0, 0, 800, 800); //Clears the screen 
    w.setColor(Color.BLACK); 
    w.drawLine(100, 0, 100, 800); 
    w.drawLine(0, 700, 800, 700); //(Should) Draw the axes 
    for(int i = 1; i < 650; i++) { 
     //Draws the function 
     //This is just a repeated drawLine call. 
    } 
} 

왜 축이 그리는 것이지만, 때 그리지 명시 적으로 호출 되었습니까? 이 함수는 ( for 루프의 블록)을 그립니다. 반면에 for 루프 앞에있는 축은 그렇지 않습니다.

+0

왜 전화하는 '페인트 (...)'직접? 이 작업은 가장 흔한 일이며 그래픽 자습서의 대부분의 권장 사항을 무시하고 수행하려는 작업에 비추어 볼 때 약간의 의미가 있습니다. Swing 그래픽 튜토리얼을 읽었습니까? 그렇지 않다면, 그들은 당신에게 제공해야 할 것이 많기 때문에 정말로해야합니다. –

답변

2

구성 요소에서 paint을 직접 호출하지 마십시오. Swing의 사용자 정의 그림의 경우 paint 대신 paintComponent을 사용하고 super.paintComponent(g)을 반드시 호출해야합니다. 또한 getGraphics은 일시적인 Graphics 참조를 반환하므로 사용자 정의 페인팅에 사용하면 안됩니다. 반대로 paint (및 paintComponent)의 Graphics 참조는 항상 올바르게 초기화되며 예상대로 그래픽 출력을 표시합니다.

관련 문제