본문 바로가기
카테고리 없음

[JAVA Swing] 배치 관리자

by winter_sunshine 2023. 11. 1.

1.  setBackground(Color.ㅁ);

  • .setBackground()는 프레임이 대신 컨텐트팬에 설정 안 해줌
  • 이건 getContentPane() 해야됨.
  • 그냥 다이렉트로 f .getContentPane(). setBackground(Color.ORANGE) (오렌지색으로 가정)

 

2.  컨테이너의  배치관리자

  • 컨테이너마다 하나의 배치관리자가 존재
  • 컨테이너에 부착되는 컴포넌트의 위치와 크기를 결정
  • 컨테니이너 크기 변경  =>  컴포넌트 위치, 크기를 자동으로 재결정

 

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

  1.  FlowLayout 배치관리자
    • 컴포넌트 삽입 순서 왼쪽  => 오른쪽
    • 배치할 공간이 없으면 아래로 내려와서 반복
  2.  BorderLayout 배치관리자
    • 컨테이너의 공간을 동(EAST), 서(WEST), 남(SOUTH), 북(NORTH), 중앙(CENTER)의 5개 영역으로 나눔
    • 5개 영역 중 응용프로그램에서 지정한 영역에 컴포넌트 배치
  3.  GridLayout 배치관리자
    • 컨테이너를 프로그램에서 설정한 동일한 크기의 2차원 격자로 나눔
    • 배치할 공간이 없으면 아래로 내려와서 반복한다.
  4.  CardLayout
    • 컨테이너의 공간에 카드를 쌓아 놓은 듯이 컴포넌트를 포개어 배치

 

   ▪ 배치관리자는  java.awt 패키지에 구현되어 있음

 

 

4.  컨테이너의 디폴트 배치관리자

=> 컨테이너 생성시 자동으로 생성되는 배치관리자를 의미

 

  • 앞에 'J' 붙으면 Swing 컨테이너,  안 붙으면 AWT 컨테이너 

(1)  BorderLayout

 

    AWT 컨테이너:   Window, Frame, Dialog

    Swing 컨테이너:  JWindow, JFrame, JDialog

 

(2)  FlowLayout

 

    AWT 컨테이너:  Panel, Applet

    Swing 컨테이너:  JPanel, JApplet

 

 

5.  컨테이너에  새로운 배치관리자 설정

=>  setLayout(LayoutManager lm);  사용

 

사례)

 

(1)  JPanel 컨테이너에 설정

 

or  

 

BorderLayout bl = new BorderLayout();

p.setLayout(bl);


 

(2)  ContentPane 컨테이너에 설정

 

or

 

FlowLayout fl = new FlowLayout();

c.setLayout(fl);

 

※ 주의:  배치관리자클래스

 

 

※  FlowLayout  배치관리자

  • 배치방법
    • 컴포넌트 삽입 순서왼쪽  =>  오른쪽
    • 배치할 공간이 없으면 아래로 내려와서 반복

 

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

 

※  BorderLayout   배치관리자

  • 배치방법
    • 컨테이너 공간을 5 구역으로 분할, 배치
      • 동, 서, 남, 북, 중앙
    • add(Component comp,  int index)
      • comp를 index의 공간에 배치
      • container.setLayout(new BorderLayout());  이후에  add() 호출
        • add()를 호출하는 주체 container
        • ex)  container.add(new JButton("div"), BorderLayout.WEST);

  • 생성자
    • BorderLayout(int hGap, int vGap)
      • hGap :   좌우 두 컴포넌트 사이의 수평 간격, 픽셀 단위  (디폴트 : 0)
      • vGap :   상하 두 컴포넌트 사이의 수직 간격, 픽셀 단위  (디폴트 : 0)
  • add() 함수
    • void add(Component comp, int index)
      • comp :  index 위치에 삽입시킬 컴포넌트
      • index :  컴포넌트가 삽입될 위치
        • 동 :  BorderLayout.EAST
        • 서 :  BorderLayout.WEST
        • 남 :  BorderLayout.SOUTH
        • 북 :  BorderLayout.NORTH
        • 중앙 :  BorderLayout.CENTER

 

예제)  아래의 코드를 실행했을 때, 결과를 그려라.

 

 

※  GridLayout   배치관리자

  • 생성자
    • GridLayout(int rows, int cols)
      • rows : 격자의 행수 (디폴트 : 1)
      • cols : 격자의 열수 (디폴트 : 1)
    • GridLayout(int rows, int cols, int hGap, int vGap)
      • hGap : 좌우 두 컴포넌트 사이의 수평 간격, 픽셀 단위(디폴트 : 0)
      • vGap : 상하 두 컴포넌트 사이의 수직 간격, 픽셀 단위(디폴트 : 0)
    • rows x cols 만큼의 셀을 가진 격자로 컨테이너 공간을 분할, 배치

 

예제)  GridLayout을 활용하여 다음 그림과 같이 한 줄에 10개의 버튼을 동일한 크기로 배치 하는 스윙 프로그램을 작성하라

 

키 포인트)    setLayout( new GridLayout(1, 10) );

 

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

  • 배치관리자가 없는 컨테이너가 필요한 경우
    • 응용프로그램에서 직접 컴포넌트의 크기와 위치를 결정하고자 하는 경우
      1. 컴포넌트의 크기나 위치를 개발자 임의로 결정하고자 하는 경우
      2. 게임 프로그램과 같이 시간이나 마우스/키보드의 입력에 따라 컴포넌트들의 위치와 크기가 수시로 변하는 경우
      3. 여러 컴포넌트들이 서로 겹쳐 출력하고자 하는 경우
  • 컨테이너의 배치 관리자 제거 방법
    • container.setLayout(null);
    • 컨테이너의 배치관리자가 없어지면, 컴포넌트에 대한 어떤 배치도 없음
      • 추가된 컴포넌트의 크기가 0으로 설정, 위치는 예측할 수 없게 됨

 

 

※  컴포넌트의 절대 위치크기 설정

  • 배치관리자가 없는 컨테이너에 컴포넌트를 삽입할 때
    • 프로그램에서 컴포넌트의 절대 크기와 위치 설정
    • 컴포넌트들이 서로 겹치게 할 수 있음
  • 컴포넌트의 크기와 위치 설정 메소드
    • void setSize(int width, int height)    // 컴포넌트 크기 설정
    • void setLocation(int x, int y)    // 컴포넌트 위치 설정
    • void setBounds(int x, int y, int width, int height)    // 위치와 크기 동시 설정

 

예)  버튼을 100×40 크기로 하고, JPanel의 (50, 50) 위치에 배치

 

예제)  다음 그림과 같이 컨텐트팬에 배치관리자를 삭제하고 9개의 버튼과 하나의 문자열을 출력하는 프로그램을 작성하라.

방법1)  JFrame의 ContentPane를 직접 얻는다.

 

 

방법2)   JFrame의 ContentPane을 생략한다. (JAVA 1.5 이후 버전)