Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java JPanel의 paintComponent() 메서드 구현 방법 완벽 가이드

JPanel은 Java Swing에서 제공하는 경량(lightweight) 컨테이너로, 기본적으로 눈에 보이지 않는 컴포넌트입니다. JPanel의 기본 레이아웃은 FlowLayout이며, JPanel 객체를 생성한 후에는 Container 클래스로부터 상속받은 add() 메서드를 호출하여 다른 컴포넌트들을 손쉽게 추가할 수 있습니다.

paintComponent() 메서드란?

paintComponent() 메서드는 단순히 배경색을 칠하는 것 이상으로 JPanel 위에 직접 그림이나 도형을 그려야 할 때 사용됩니다. 이 메서드는 이미 JPanel 클래스 내부에 정의되어 있기 때문에, 새로운 그리기 작업을 추가하려면 반드시 @Override와 함께 super 키워드를 활용하여 기존 동작을 확장해야 합니다.

또한 이 메서드는 Graphics 객체를 매개변수로 받으며, 패널의 배경 처리를 담당하는 super.paintComponent() 호출은 반드시 메서드의 첫 번째 줄에서 실행되어야 합니다. 이를 생략하면 이전에 그렸던 잔상이 남거나 화면이 깨질 수 있습니다.

문법(Syntax)

protected void paintComponent(Graphics g)

예제 코드

아래 예제는 paintComponent()를 오버라이드하여 JPanel 위에 웃는 얼굴(스마일리)을 그리는 프로그램입니다.

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

public class SmileyApp extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.YELLOW);
        g.fillOval(10, 10, 200, 200);   // 얼굴 그리기
        // 눈 그리기
        g.setColor(Color.BLACK);
        g.fillOval(55, 65, 30, 30);
        g.fillOval(135, 65, 30, 30);
        // 입 그리기
        g.fillOval(50, 110, 120, 60);
        // 미소 표현하기
        g.setColor(Color.YELLOW);
        g.fillRect(50, 110, 120, 30);
        g.fillOval(50, 120, 120, 40);
    }

    public static void main(String[] args) {
        SmileyApp smiley = new SmileyApp();
        JFrame app = new JFrame("Smiley App");
        app.add(smiley, BorderLayout.CENTER);
        app.setSize(300, 300);
        app.setLocationRelativeTo(null);
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setVisible(true);
    }
}

코드 설명

  • extends JPanel: JPanel을 상속받아 paintComponent()를 재정의할 수 있도록 합니다.
  • g.setColor(): 그리기 작업에 사용할 색상을 지정합니다.
  • g.fillOval(), g.fillRect(): 각각 타원과 사각형을 채워 그리는 메서드로, 얼굴·눈·입을 표현하는 데 사용됩니다.
  • JFrame 설정: 프레임 크기 지정, 화면 중앙 배치, 종료 버튼 동작 설정 후 setVisible(true)로 화면에 출력합니다.

실행 결과(Output)

위 코드를 실행하면 노란색 원 안에 검은색 눈과 미소 짓는 입이 그려진 스마일리 얼굴이 JFrame 화면 중앙에 나타납니다.

Java JPanel의 paintComponent() 메서드 구현 방법 완벽 가이드