Framework & Library/Swing

[Swing] 배치 관리자

굠민 2024. 9. 5. 15:05

< 대표적인 배치 관리자 ( =레이아웃 관리자 ) >

: Swing에서는 UI 컴포넌트들을 어떻게 배치할지 결정하는 배치(레이아웃) 관리자를 제공한다.

 각각의 배치 관리자는 컴포넌트를 배치하는 고유 방식을 가지고 있기에, 상황에 맞게 적절한 레이아웃 관리자를 선택하여 사용하면 된다. 

  • FlowLayout
    :  UI 요소들을 간단하게 나열할 때 적합한 관리자
    • 컨테이너에 컴포넌트가 들어오면 순서대로 왼쪽에서 오른쪽으로 배치
    • 더 이상 배치할 공간이 없을 경우 아래 줄로 내려와 왼쪽부터 다시 배치

📄예시 코드

JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(new JButton("버튼 1"));
panel.add(new JButton("버튼 2"));
panel.add(new JButton("버튼 3"));

 

  • BorderLayout
    : 상단에 메뉴, 하단에 상태 표시줄, 중앙에 주요 내용을 배치하는 구조에 적합한 관리자 
    • 컴테이너의 공간을 동(East), 서(West), 남(South), 북(North), 중앙 영역(Center)의 다섯 개의 영역으로 나누고 응용프로그램에서 지정한 영역에 컴포넌트를 배치한다.
    • 컴포넌트를 배치하는 배치관리자
      (따라서, 만약 배치 관리자를 지정하지 않고 버튼을 프레임에 추가하면 버튼이 전체화면이 된다.)

📄예시 코드

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JButton("북쪽"), BorderLayout.NORTH);
panel.add(new JButton("남쪽"), BorderLayout.SOUTH);
panel.add(new JButton("동쪽"), BorderLayout.EAST);
panel.add(new JButton("서쪽"), BorderLayout.WEST);
panel.add(new JButton("중앙"), BorderLayout.CENTER);
  • GridLayout
    : 계산기, 체스보드와 같이 정렬된 형태로 UI를 배치할 때 적합한 관리자
    • 컨테이너의 공간을 응용프로그램에서 설정한 동일 크기의 2차원 그리드로 나눈다.
    • 컴포넌트를 들어오는 순서대로 좌에서 우로, 그리고 위에서 아래로 순서대로 배치

📄예시 코드

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 3));  // 2행 3열
panel.add(new JButton("1"));
panel.add(new JButton("2"));
panel.add(new JButton("3"));
panel.add(new JButton("4"));
panel.add(new JButton("5"));
panel.add(new JButton("6"));
  • CardLayout
    : 탭, 설정 화면 등에서 자주 사용되는 관리자
    • 컴포넌트를 쌓아서 배치할 수 있는 레이아웃
    • 컴포넌트의 크기는 컨테이너의 크기와 동일하게 설정된다.

📄예시 코드

// CardLayout 구조
JPanel cardPanel = new JPanel(new CardLayout());
cardPanel.add(new JPanel(), "Card1");  // 첫 번째 카드
cardPanel.add(new JPanel(), "Card2");  // 두 번째 카드

// 카드 전환 (next, previous 등)
CardLayout cl = (CardLayout) cardPanel.getLayout();
cl.next(cardPanel);  // 다음 카드로 전환
  • AbsoluteLayout
    : 픽셀 단위로 위치를 정확하게 설정해야 하는 특성과 유지보수가 어려운 특성이 있다. 
    • 임의로 위치를 지정하여 컴포넌트를 배치할 수 있다. 

📄예시 코드

// AbsoluteLayout 구조
JFrame frame = new JFrame();
frame.setLayout(null);  // AbsoluteLayout 사용

JButton button = new JButton("버튼");
button.setBounds(50, 50, 100, 30);  // 위치와 크기 설정
frame.add(button);