배치 관리자

·2025년 6월 1일

Power Java

목록 보기
53/75

9.4 배치 관리자

배치 관리자

: 컨테이너 안에 존재하는 컴포넌트들의 크기와 위치를 관리하는 객체

< 배치 관리자의 종류 >

< 배치 관리자를 설정하기 >

(1) new 연산자를 이용하여 배치 관리자 객체를 만든다.
(2) 이 객체를 컨테이너의 setLayout() 메소드를 사용하여 배치 관리자로 지정한다.

panel.setLayout(new BorderLayout());

-컴포넌트의 크기와 힌트를 배치 관리자에게 주고 싶은 경우

  • settMinimumSize()
  • setPreferredSize()
  • setMaximumSize()

-정렬에 대한 힌트를 주고 싶은 경우

  • setAlignmentX()
  • setAlignmentY()

FlowLayout

-컴포넌트들을 왼쪽에서 오른쪽으로 버튼을 배치한다.

FlowLayout의 생성자

  • FlowLayout()
  • FlowLayout(int align) // align은 정렬 방법을 지정한다.
    ex) 왼쪽 정렬=FlowLayout.LEFT
  • FlowLayout(int align, int hGap, int vGap)
    : hGap은 컴포넌트 간의 수평 간격, vGap은 컴포넌트 간의 수직 간격.
import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame {
	public MyFrame() {
    	setTitle("FlowLayoutTest");
        setSize(300, 150);
        setLayout(new FlowLayout());
        
        add(new JButton("Button1"));
        add(new JButton("Button2"));
        add(new JButton("Button3"));
        
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

BorderLayout

: 컨테이너를 5개 영역(상, 하, 좌, 우, 중앙)으로 구분하고,
각각의 영역에 컴포넌트를 배치할 수 있는 배치 관리자.
-JFrame, JDialog와 같은 최상위 컨테이너의 디폴트 배치 관리자.

  • 영역 지정 문구
    "North", "South", "East", "West", "Center"
add(button, "South");

*영역을 지정하지 않으면 컴포넌트는 중앙에 놓임.

FlowLayout의 생성자

  • BorderLayout()
  • BorderLayout(int hGap, int vGap)

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

public class MyFrame extends JFrame {
	public MyFrame() {
    	setTitle("BoarderLayoutTest");
        setSize(300, 150);
        setLayout(new BorderLayout());
        
        Jbutton b1 = new JButton("North");
        Jbutton b2 = new JButton("South");
        Jbutton b3 = new JButton("East");
        Jbutton b4 = new JButton("West");
        Jbutton b5 = new JButton("Center");
        
        add(b1, "North"));
        add(b2, "South"));
        add(b3, "East"));
        add(b4, "West"));
        add(b5, "Center"));
        
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

GridLayout

: 컨테이너 공간을 격자 모양으로 나눈 후에 각 셀에 하나씩 컴포넌트들을 배치한다.

GridLayout의 생성자

  • GridLayout()
    : 1행과 1열의 격자
  • GridLayout(int rows, int cols)
    : rows 행과 cols 열
  • GridLayout(int rows, int cols, int hGap, int vGap)
    : 간격 지정
import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame {
	public MyFrame() {
    	setTitle("GridLayoutTest");
        setSize(300, 150);
        setLayout(new GridLayout(2, 3));
        
        add(new JButton("Button1"));
        add(new JButton("Button2"));
        add(new JButton("Button3"));
        add(new JButton("Button4"));
        
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

** 행의 개수나 열의 개수를 0으로 하면 추가하는 컴포넌트의 개수에 따라서 행이나 열의 개수가 정해진다.

CardLayout

: 한 번에 하나의 컴포넌트만 볼 수 있게 배치하는 관리자.

이 클래스에서 일반적으로 사용하는 메소드

  • next(container)
    : 주어진 컨테이너의 다음 카드로 이동한다.
  • previous(container)
    : 주어진 컨테이너의 이전 카드로 이동한다.
  • first(container)
    : 주어진 컨테이너의 첫 번째 카드로 이동한다.
  • last(container)
    : 주어진 컨테이너의 마지막 카드로 이동한다.
public class MyFrame extends JFrame {
	JButton b1, b2, b3;
    Container cPane;
    CardLayout layoutm;
    
    public MyFrame() {
    	setTitle("BoarderLayoutTest");
        setSize(300, 150);
        cPane = getContentPane();
        layoutm = new CardLayout();
        setLayout(layoutm);
        
        JButton b1 = new JButton("Card #1");
        JButton b2 = new JButton("Card #2");
        JButton b3 = new JButton("Card #3");
        
        add(b1);
        add(b2);
        add(b3);
        b1.addActionListener(e->layoutm.next(cPane));
        b2.addActionListner(e->layoutm.next(cPane));
        b3.addActionListner(e->layoutm.next(cPane));
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

< 절대 위치로 배치하기 >

-배치 관리자를 사용하는 것이 권장되나,
특별한 경우에는 컴포넌트들을 배치 관리자 없이 배치하기도 한다.
ex) 컴포넌트와 컴포넌트가 겹치게 하고자 하는 경우.

1) 배치관리자를 null로 설정한다.
2) add() 메소드를 사용하여 컴포넌트를 컨테이너에 추가한다.
3)
setSize(w, h)와 setLocation(x, y)을 사용하여 컴포넌트의 위치와 크기를 지정한다.
or
setBounds(x, y, w, h)를 사용하여 위치와 크기를 동시에 지정한다.

public class MyFrame extends JFrame {
	private JButton b1, b2;
    
    public MyFrame() {
    	setTitle("Absolute Position Test");
        setSize(300, 150);
        setLayout(null);	// (1)
        
        b1 = new JButton("Button #1);
        add(b1);	// (2)
        b1.setLocation(50, 30);	// (3)
        b1.setSize(90, 50);
        
        b2 = new Jbutton("Button #2);
        add(b2);
        b2.setBounds(180, 30, 90, 20); // (3)
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String args[]) {
    	MyFrame f = new MyFrame();
    }
}


1. GridLayout
2. FlowLayout
3. BorderLayout
4. setLayout(null);을 사용하여 배치관리자를 제거한다.

0개의 댓글