컨테이너와 배치 개념

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개의 댓글