
JPanel은 Java Swing에서 컴포넌트들을 그룹으로 묶거나, 그림을 그리는 데 사용되는 가장 기본적인 컨테이너이다.
💡
JFrame이액자라면,JPanel은 그 안에 들어가는 **도화지나게시판`**이라고 생각하면 된다.
컨테이너 역할: JPanel은 그 자체로는 눈에 잘 보이지 않지만, JButton, JLabel, JTextField 등 다른 컴포넌트들을 담아서 그룹으로 괄리할 수 있다.
기본 레이아웃 - FlowLayout: JFrame의 기본 레이아웃이 BorderLayout인 것과 달리, JPanel의 기본 레이아웃은 FlowLayout이다.
중첩 구조: JPanel 안에 또 다른 JPanel을 넣는 식으로 복잡한 화면 레이아웃을 구성할 수 있다.
예를 들어, 큰 패널(BorderLayout)의 중앙(Center) 구역에 작은 패널(FlowLayout)을 넣어 버튼을 배치하는 식이다.
커스텀 페인팅: pointComponent 메서드를 오버라이드(재정의)해서 원하는 도형, 이미지, 캐릭터 등 자신만의 그래픽을 직접 그리는 도화지로 사용할 수 있다.
add(Component comp): 패널 위에 버튼, 레이블 등 다른 컴포넌트를 추가한다.
// panel에 "클릭"이라는 텍스트가 적힌 버튼을 추가
panel.add(new JButton("클릭"));
remove(Conponent comp): 패널에 추가된 특정 컴포넌트를 제거한다.
// panel에 추가된 myButton을 제거
panel.remove(myButton);
// 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)는 빨간색 실선 테두리를 만든 코드이다.
오버라이드용
// 기존 JPanel이 가지고 있던 paintComponent라는 메서드를 재정의(Override)함
@Override
protected void paintComponent(Graphics g) {
// 기존의 JPanel이 하던 기본적인 그리기 작업(배경색 칠하기 등)을 먼저 실행하라는 의미
super.paintComponent(g);
// g라는 붓을 사용해서, 패널의 가로 10, 세로 20 위치에 "Hello"라는 글자를 그림
g.drawString("Hello", 10, 20);
}호출용
paintComponent가 실행됨)// 시스템이 적절한 타이밍에 재정의한 paintComponent 메서드를 실행 시켜서 화면을 업데이트함
panel.repaint();