Java Swing 02. JPanel

BuBuck·2025년 8월 31일

Java Swing

목록 보기
3/3
post-thumbnail

JPanel이란?

JPanelJava Swing에서 컴포넌트들을 그룹으로 묶거나, 그림을 그리는 데 사용되는 가장 기본적인 컨테이너이다.

💡 JFrame액자라면, JPanel은 그 안에 들어가는 **도화지게시판`**이라고 생각하면 된다.


JPanel의 주요 특징

  • 컨테이너 역할: JPanel은 그 자체로는 눈에 잘 보이지 않지만, JButton, JLabel, JTextField 등 다른 컴포넌트들을 담아서 그룹으로 괄리할 수 있다.

  • 기본 레이아웃 - FlowLayout: JFrame의 기본 레이아웃이 BorderLayout인 것과 달리, JPanel의 기본 레이아웃은 FlowLayout이다.

  • 중첩 구조: JPanel 안에 또 다른 JPanel을 넣는 식으로 복잡한 화면 레이아웃을 구성할 수 있다.

    예를 들어, 큰 패널(BorderLayout)의 중앙(Center) 구역에 작은 패널(FlowLayout)을 넣어 버튼을 배치하는 식이다.

  • 커스텀 페인팅: pointComponent 메서드를 오버라이드(재정의)해서 원하는 도형, 이미지, 캐릭터 등 자신만의 그래픽을 직접 그리는 도화지로 사용할 수 있다.


자주 사용하는 JPanel 메서드

컴포넌트 관리

  • add(Component comp): 패널 위에 버튼, 레이블 등 다른 컴포넌트를 추가한다.

    // panel에 "클릭"이라는 텍스트가 적힌 버튼을 추가
    panel.add(new JButton("클릭"));
  • remove(Conponent comp): 패널에 추가된 특정 컴포넌트를 제거한다.

    // panel에 추가된 myButton을 제거
    panel.remove(myButton);

레이아웃 설정

  • setLayout(LayoutManager mgr): 패널 내부의 컴포넌트 배치 방식을 설정한다.
    // panel에 레이아웃을 BorderLayout 방식으로 설정
    panel.setLayout(new BorderLayout());

    💡 이제 이 패널을 동(EAST), 서(WEST), 남(SOUTH), 북(NORTH), 중앙(CENTER)으로 구역이 나뉘게 된다.

스타일 및 외형

  • setBackground(Color c): 패널의 배경색을 지정한다.

    // panel에 배경색을 검정색(BLACK)으로 설정
    panel.setBackground(Color.BLACK);
  • setBorder(Border border): 패널의 테두리를 설정한다. (디버깅 시 영역 확인에 유용하다)

    // panel에 테두리를 빨간색(RED)으로 설정
    panel.setBorder(BorderFactory.createLineBorder(Color.RED));

    💡 BorderFactory.createLineBorder(Color.RED)는 빨간색 실선 테두리를 만든 코드이다.

커스텀 드로잉

오버라이드용

  • paintComponent(Graphics g): 이 메서드를 재정의해서 패널에 그림을 그린다. (직접 호출하지 않음)
    // 기존 JPanel이 가지고 있던 paintComponent라는 메서드를 재정의(Override)함
    @Override
    protected void paintComponent(Graphics g) {
    	// 기존의 JPanel이 하던 기본적인 그리기 작업(배경색 칠하기 등)을 먼저 실행하라는 의미
       super.paintComponent(g);
       // g라는 붓을 사용해서, 패널의 가로 10, 세로 20 위치에 "Hello"라는 글자를 그림
       g.drawString("Hello", 10, 20);
    }

호출용

  • repaint(): 패널을 다시 그리도록 시스템에 요청한다. (이 메서드를 호출하면 잠시 후 paintComponent가 실행됨)
    // 시스템이 적절한 타이밍에 재정의한 paintComponent 메서드를 실행 시켜서 화면을 업데이트함
    panel.repaint();
profile
커피대신 커피(JAVA) 마시기

0개의 댓글