Graphics 클래스, Class Graphics, paint(Graphics g), repaint(), getGraphics()

CODEDRAGON Development/Java

반응형

 

 

Graphics 클래스

·       그래픽관련 기능을 구현한 클래스로 Graphics 클래스와 이를 상속하는 Graphics2D 클래스가 있습니다.

·       Graphics2D 클래스는 JDK1.2 이후에 추가된 것으로 2D(평면) 그래픽 환경을 지원하는 API입니다.

 

 

 

Class Graphics

https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html

http://ith.kr/chair/javadoc/j2s131k/java/awt/Graphics.html

 

paint(Graphics g)

·       컴포넌트의 paint() 메소드는 자신을 그릴 때 호출되는 메소드입니다. 이 메소드는 컴포넌트가 다시 그려질 필요가 있을 때 자동으로 호출됩니다. 예를 들어 컴포넌트의 일부가 어떤 것에 의해 가려진 후, 다시 보여지면 가려졌던 부분을 다시 그릴 필요가 있습니다. 이때 자동 호출되어 집니다.  (paint() 메소드는 필요에 의해 자동으로 호출됩니다.)

·       Paint() 메소드의 인수로 Graphics 객체(일반적으로 Graphic context라고 함)가 넘어옵니다.

·       컴포넌트의 일부를 다시 그릴 필요가 있으면 Graphics 객체를 이용하여 컴포넌트를 그립니다.

·       프로그래머는 paint() 메소드를 오버라이드해서 컴포넌트에 원하는 그림이나 도형을 그릴 수 있습니다.

·       우측 상단의 최소화 버튼, 최대화 버튼 클릭, 창의 사이즈를 변경, 창의 위치를 변경, 다른 화면에 가려졌다가 다시 보여질 경우 호출됩니다.

 

public void paint(Graphics g)

 

 

repaint()

repaint() -> update() -> paint()

paint() 메소드는 필요에 의해 자동으로 호출됩니다. 하지만 화면이 가려지지 않더라도 화면을 갱신해야할 경우가 생길 수 있습니다. 이 때는 repaint() 메소드들 호출하면 됩니다. repaint()메소드가 호출되면 빠르게 update() 메소드가 호출되고 update() 메소드는 컴포넌트를 원래의 모습대로 그린 후에 paint() 메소드를 호출합니다.

 

 

상위 update 메소드에서 paint() 메소드가 호출됩니다

상위 클래스인 Container클래스의 update()메소드에서 paint() 메소드가 호출되는 것을 확인할 수 있습니다.

public void update(Graphics g) {

   if (isShowing()) {

       if (! (peer instanceof LightweightPeer)) {

           g.clearRect(0, 0, width, height);

       }

       paint(g);

   }

}

 

 

getGraphics()

컴포넌트의 Graphics 객체를 반환하는 메소드입니다.

Paint() 메소드를 오버라이드하지 않고도 컴포넌트에 그릴 수 있는 방법이 있는데 Component 클래스의 getGraphics() 메소드를 이용하는 것입니다. 이 메소드는 컴포넌트의 Graphics 객체의 레퍼런스를 반환합니다. 주의할 점은 컴포넌트가 보여질 수 없는 상태에서 getGraphics를 호출하면 null이 반환됩니다.

public Graphics getGraphics()