Java Layout Manager

[ Last update:   March 8, 2003. ]

 

버튼이나 스크롤바 등 GUI 부품을 화면에 배치하기 위해서는, Java의 Layout Manager 가 담당한다. 레이아웃 매니져를 특별히 지정하지 않은 경우는 FlowLayout 매니져가 사용된다. 매니져에는 표1에 나타낸 종류들이 준비되어 있다.

표1 Layout Manager의 종류
Manager기능
FlowLayout 부품을 장착하는 순으로 일렬로 배치한다.(Default)
BorderLayout 부품을 상하, 좌우, 중앙에 배치
GridLayout 부품을 타일 상태로 표안에 배치
GridBagLayout 다른 크기를 가지는 부품을 타일 상태로 배치
CradLayout 부품을 카드 모양으로 순서대로 배치
 

 ● BorderLayout 매니져 사용 예

부품의 장착 위치가 위에 있는 경우는"North", 밑에 위치한 경우는 "South", 오른쪽은 "East", 왼편은 "West", 중앙을 "Center"로 지정하는 방식. 레이아웃은 init 메소드로 행한다. 예를 들면,

public void init(){ setLayout(new BorderLayout()); scr = new Scrollbar(Scrollbar.HORIZONTAL,40,10,0,100); add(scr, "South"); // 스크롤바를 밑쪽에 배치 scr.setUnitIncrement(2); // 좌우 방향버튼을 눌렀을 때의 증분 (생략하면 1로)   scr.setBlockIncrement(20); // 슬라이더부를 눌렀을 때의 증분 (생략은 10) scr.addAdjustIncrement(this); // }

 ● GridLayout 매니져 사용 예

타일 모양으로, 전부 같은 크기의 부품을 격자모양으로 배치하는 것이 GridLayout이다. GridRayout(행수, 열수, hgap, vgap). 여기서, 행수는 상하방향으로 나열하는 부품의 수, 열수는 스평방향으로 나열하는 부품수, hgap은 수평방향의 부품간의 간격, vgap는 수직방향의 간격의 크기 (pixel단위)이다. 예를 들어, 장착부품수가 하나밖에 없는 경우는, 행수는 지정한 값에서 1을 뺀 높이에 해당하는 공백이 아래쪽에 설정되고, 이 부분은 그림이 표시된다.

public void init(){

   setLayout(new GridLayout(10,1,2,2)); // 10행, 1열로 배치(아래 9행분은 그림을 표시)

   scr = new Scrollbar(Scrollbar.HORIZONTAL,40,10,0,100);

   add(scr); // 스크롤바를 최상단에 배치 ?????

}

 ● Pannel 사용 예

몇 개의 부품을 하나의 그룹으로 묶어서 아래쪽 아니면 오른편에 배치하고 싶을 때는, 하나의 그룹을 패널로 정리하고 이것을 BorderLayout에서 화면에 배치.

public void init(){

  setLayout(new BorderLayout()); // 부품의 화면배치는 BorderLayout

  Panel p=new Panel(); // 패널 객체 생성

  p.setLayout(new GridLayout(3,2,2,2)); // 3행, 2열의 GridLayout의 패널 작성

  scrA = new Scrollbar(Scrollbar.HORIZONTAL,40,10,0,100); // 부품은 3개

  scrB = new Scrollbar(Scrollbar.HORIZONTAL,40,10,0,100);

  scrC = new Scrollbar(Scrollbar.HORIZONTAL,40,10,0,100);

  p.add(new Label(" case A ")); // 스크롤바 왼편에 라벨을 만든다

  p.add(scrA); // 스크롤바 scrA를 패널 최상단에 배치

  p.add(new Label(" case B ")); p.add(scrB);

  p.add(new Label(" case C ")); p.add(scrC);

  add(p,"North"); // 패널을 화면 상단에 배치 ....

}

 

   GridBagLayout 및 CardLayout에 대해서는 생략.