본문 바로가기

자바공부

자바 그래픽(1), 명품자바프로그래밍12장

728x90
반응형

* 거의 모든 GUI 시스템에서 그리기의 기본은 컴포넌트가 자신의 모양을 스스로 그린다는 점이다.

 

* 모든 스윙 컴포넌트가 가지고 있는 메소드로서 스윙 컴포넌트가 자신의 내부를 그리는 paintComponent() 메소드의 원형

void paintComponent(Graphics g)

 

* paintComponent()는 JComponent의 추상 메소드이므로 모든 스윙 컴포넌트가 오버라이딩하여 가지고 있다.

 

* 스윙 컴포넌트의 paintComponent()가 호출되는 경우

1) 컴포넌트가 처음으로 그려질 때

2) 컴포넌트의 크기나 위치 변경 등 컴포넌트에 변화가 생길 때

3) 다른 윈도우에 의해 가려졌다가 드러날 때

4) 아이콘화되었다가 본래 크기로 복구할 때

5) 응용프로그램에서 컴포넌트의 repaint() 호출에 의해 다시 그려질 때

 

* 자바 가산 기계나 응용체제는 스윙 으용프로그램의 화면 이미지를 저장하지 않는다.

스윙 응용프로그램이 아이콘 상태에서 복구할 때 자바 플랫폼으로부터 스윙 응용프로그램을 구성하는 각 컴포넌트의 paintComponent() 메소드가 호출되어 그려지는 것이다.

 

* paintComponent(Graphic g)에 인자로 넘어오는 Graphics 객체 g를 그래픽 컨텍스트(graphics context)라고 부르며 자바 플랫폼에 의해 생성되어 공급된다.

Graphics 객체는 컴포넌트 그리기를 위한 기본 정보와 다양한 메소드를 가지고 있다.

Graphics의 경로명은 java.awt.Graphics로서 AWT 패키지에 속해 있다.

 

* 개발자가 JComponent를 상속받아 새로운 컴포넌트를 설계하든지 아니면 기존의 스윙 컴포넌트의 모양에 변화를 주고자 할 때 다음과 같이 paintComponent()를 오버라이딩 하여 자신만의 컴포넌트 모양을 그릴 수 있다.

class MyComponent extends JXXX{ JXXX는 기존의 스윙 컴포넌트
	...
    public void paintComponent(Graphics g){
    	... 필요한 코드 작성 ...
    }
    ...
}

 

* JPanel은 빈 캔버스와 같이 아무 모양도 없는 단순한 컴포넌트이면서 컨테이너이다.

JPanel은 개발자가 그래픽을 통한 다양한 GUI를 창출할 수 있는 캔버스로 적합하기 때문에 그래픽을 위해 많이 사용된다.

JPanel 클래스를 상속받고 paintComponent()를 오버라이딩하여 그리기를 구현한다.

class MyPanel extends JPanel{
	public void paintComponent(Graphics g){
    	super.paintComponet(Graphic g);
        g.setColor(Color.BLUE);
        g.drawRect(10,10,50,50)
        g.drawRect(50,50,50,50);
        g.drawRect(90,90,50,50);
    }
}

 

* JPanel의 paintComponent()는 패널상에 그려진 이전 내용을 모두 지우도록 구현되어 있다.

그러므로 MyPaneldml paintComponent()에서 super.paintComponent()를 호출하면 이전에 그려진 모든 내용을 지울 수 있다.

일반적으로 JPanel을 상속받아 paintComponent()를 작성하는 경우 super.paintComponent()를 제일 먼저 호출하는 것이 좋다.

JPanel뿐만 아니라 다른 스윙 컴포넌트를 상속받는 경우도 마찬가지이다.

 

* 스윙 컴포넌트는 전형적인 모양의 사용자 인터페이스를 만들기에는 사용하기 쉽고 효과적이지만 차트, 게임 등 자유로운 콘텐트를 만들기에는 부족함이 있다.

도형 그리기, 이미지 그리기 등 그래픽을 이용하면 기존의 스윙컴포너틑로 만들어 내지 못하던 모양을 자유자재로 만들어 낼 수 있다.

또한 화면 출력의 속도도 컴포넌트를 이용하는 경우보다 빠르다.

반응형