컨테이너와 배치 개념

ChoRong0824·2022년 9월 16일
0

Java_GUI

목록 보기
2/9

컨테이너와 배치 개념

배치 관리자 대표 유형 4 가지

  • java.awt 패키지에 구현되어 있음

컨테이너와 배치관리자

  • 컨테이너의 디폴트 배치관리자
    - 컨테이너는 생성시 디폴트 배치관리자 설정
  • 컨테이너에 새로운 배치관리자 설정
    - Container.setLayout(LayoutManager Im)
    • Im을 새로운 배치관리자로 설정
// JPanel 패널에 BorderLayout 배치관리자 설정
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
// 컨텐트팬의 배치 관리자를 FlowLayout 으로 변경
Container c = frame.getContenPane(); // 컨텐트 팬
c.setLayout(new FlowLayout());

FlowLayout

  • 배치방법
    - 컨테이너 공간 내에 왼쪽에서 오른쪽으로 배치
        - 다시 위에서 아래로 순서대로 컴포넌트를 배치한다.
    container.setLayout(new FlowLayout());
     container.add(new JButton("add"));
     container.add(new JButton("sub"));
     container.add(new JButton("mul"));
     container.add(new JButton("div"));
     container.add(new JButton("Calculate"));
  • 컨테이너의 크기가 변하면 컴포넌트 재배치

FlowLayout - 생성자와 속성

생성자

FlowLayout()
FlowLayout(int align)
FlowLayout(int align, int hGaap, int vGap)
  • align : 컴포넌트의 정렬 방법. 왼쪽 정렬(FlowLayout.LEFT), 오른쪽 정렬(FlowLayout.RIGHT), 중앙 정렬(FlowLayout.CENTER(디폴트))
  • hGap : 좌우 컴포넌트 사이의 수평 간격, 픽셀 단위. 디폴트는 5
  • vGap : 상하 컴포넌트 사이의 수직 간격, 픽셀 단위. 디폴트는 5

(참고로 당연하게 알듯이, return=0은 정상종료 음수(보통 리턴 -1씀)는 보편적으로 비정상)

예제 9-3 : FlowLayout 배치관리자 활용


  • 참고로, 이렇게 코드를 짜게되면 창크기가 고정값이 아니고 클라이언트의 요청에 따라 창의 크기가 바뀝니다.

BorderLayout

배치방법

  • 컨테이너 공간을 5 구역으로 분할,배치
    -East, West, South, North, Center
  • 배치 방법
    - add(Component comp, int index)
    • comp를 index의 공간에 배치
  • 컨테이너의 크기가 변하면 재배치

생성자

void add(Componenet comp, int index) comp 컴포넌트를 indext 위치에 삽입한다.
- comp : 컨테이너에 삽입되는 컴포넌트
- index : 컴포넌트의 위치
	동 : BorderLayout.EAST
    서 : BorderLayout.WEST
    남 : BorderLayout.SOUTH
    북 : BorderLayout.NORTH
    중앙 : BorderLayout.CENTER
  • BorderLayout의 사용예

예제 9-4 : BorderLayout 배치 관리자를 사용하는 예


코드에서 확인할 수 있듯이, 컨테이너에 setLayout 값 설정

  • add 와 mul의 사이 공간을 vGap, 20픽셀
  • Calculate 와 mul의 가로 사이의 공간을 hGap, 30픽셀

GridLayout

배치방법

  • 컨테이너 공간을 동일한 사각형 격자 (그리드)로 분할하고 각 셀에 하나의 컴포넌트 배치
    - 격자 구성은 생성자에 행수와 열수 지정
    - 셀에 왼쪽에서 오른쪽으로, 다시 위에서 아래로 순서대로 배치
  • 컨테이너의 크기가 변하면 재배치
    - 크기 재조정

생성자

GridLayout()
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hGap, int vGap)
	- rows : 그리드의 행 수, 디폴트는 1
    - cols : 그리드의 행 수, 디폴트는 1
    - hGap : 좌우 컴포넌트 사이의 수평 간격, 픽셀단위. 디폴트는 0
	- hGap : 상하 컴포넌트 사이의 수직 간격, 픽셀단위. 디폴트는 0

예제 9-5 : GridLayout으로 입력 폼 만들기

  • 두 행 사이의 수직 간격 vGap이 5 픽셀로 설정됨 (컴퓨터 공학과, 공백 간격)

배치관리자 없는 컨테이너

배치관리자가 없는 컨테이너란?

  • 응용프로그램에서 컴포넌트의 절대 크기와 절대 위치 결정

용도

  • 컴포넌트의 크기나 위치를 개발자 임의로 결정하고자 하는 경우
  • 게임 프로그램과 같이 시간이나 마우스/키보드의 입력에 따라 컴포넌트들의 위치와 크기가 수시로 변하는 경우
  • 여러 컴포넌트들이 서로 겹쳐 출력하고자 하는 경우

컨테이너의 배치 관리자 제거 방법

  • container.setLayout(null);
//JPanel의 배치관리자를 삭제하는 예

JPanel p = new JPane();
p.setLayout(null);
  • 컴포넌트의 절대 크기와 절대 위치 설정
    - 프로그램 내에서 이루어져야 함
    - 다음 메소드 이용
    • 컴포넌트 크기 설정 : component.setSize(int width, int height);
    • 컴포넌트 위치 설정 : componet.setLocation(int x, int y);
    • 컴포넌트 위치와 크기 동시 설정 : component.setBounds(int x, int y, int width, int height);

예제 9-6 : 배치관리자 없는 컨테이너에 컴포넌트를 절대 위치와 크기로 지정

profile
정진, "어제보다 더 나은 오늘이 되자"

0개의 댓글