본문 바로가기

Project 자료수집

SWT 레이아웃 정리

FillLayout

컨테이너의 공간을 위젯으로 가득 채운다.
위젯의 크기는 동일하고 여백이나 사이띄기를 설정할 수 없다. 
FillLayout에 설정할 수 있는 속성은 type 하나뿐이다. 
기본값은 SWT.HORIZONTAL이고 위젯을 좌에서 우로 배치한다. SWT.VERTICAL은 위에서 아래로 배치한다.

RowLayout

RowLayout에서 설정할 수 있는 속성은 다음과 같다.

  • wrap: 위젯이 컨테이너의 공간을 넘어갈 때 다음 줄로 내릴것인지 결정한다. 기본값 true
  • pack: 위젯의 내용에 최적으로 크기를 조절할것인지 결정한다. 기본값 true
  • justify: 위젯을 컨테이너의 공간에 동일한 간격으로 펼쳐놓을것인지를 결정한다. 기본값 false

여백 속성

  • marginLeft: 컨테이너 안쪽에서 위젯들이 놓일 영역사이의 좌측 여백
  • marginTop: 컨테이너 안쪽의 위쪽 여백
  • marginBottom: 컨테이너 안쪽의 아래쪽 여백
  • marginRight: 컨테이너 안쪽의 오른쪽 여백
  • spacing: 위젯들간의 간격

아래 그림은 pack 속성과, justify 속성의 역할을 보여준다.

  • pack 속성을 false로 했기 때문에 모든 버튼의 크기가 가장 큰 버튼의 크기에 맞춰졌다.
  • justify 속성을 true로 했기 때문에 spacing을 무시하고 컨테이너의 위젯 영역에 동일한 간격으로 펼쳐졌다.
  • RowData를 이용해 첫번째 버튼의 폭과 높이를 설정했다.
 RowData data = new RowData (200, 50);
 button0.setLayoutData (data);



GridLayout

GridLayout에서 설정할 수 있는 속성은 다음과 같다.

  • GridLayout은 type(SWT.HORIZONTAL,SWT.VERTICAL) 속성을 사용하지 않는다.
  • numColumns: 컬럼의 수를 지정한다.
  • makeColumnsEqualWidth: 모든 컬럼의 폭을 동일하게 할것인지를 결정한다.
  • 컬럼수를 제외한 실제 컨트롤의 레이아웃은 GridData에 의해 결정된다고 생각하면 되겠다.

여백 속성

  • marginHeight: 컨테이너와 위젯영역의 상하 여백을 설정한다.
  • marginWidth: 컨테이너와 위젝영역의 좌우 여백을 설정한다.
  • horizontalSpacing: 컬럼간 여백을 설정한다.
  • verticalSpacing: 행간 여백을 설정한다.

GridData

  • width: 위젯의 폭
  • height: 위젯의 높이
  • horizontalAlignment: 좌우정렬 설정
    • BEGINNING: 왼쪽 정렬
    • CENTER: 가운데 정렬
    • END: 오른쪽 정렬
    • FILL: Grid 영역을 좌우로 채우기
  • verticalAlignment: 상하정렬 설정
    • BEGINNING: 위쪽 정렬
    • CENTER: 가운데 정렬
    • END: 아래쪽 정렬
    • FILL: Grid영역을 상하로 채우기
  • horizontalIndent: 들여쓰기
  • horizontalSpan: 오른쪽으로 몇개의 컬럼영역까지 확장할것인지 설정
  • verticalSpan: 아래쪽으로 몇개의 컬럼영역까지 확장할것인지 설정
  • grabExcessHorizontalSpace: 컨테이너의 오른쪽 빈 공간을 위젯을 늘려서 채울것인지를 결정
  • grabExcessVerticalSpace:컨테이너의 아래쪽 빈 공간을 위젯을 늘려서 채울것인지를 결정
     
  • horizontalAlignment를 FILL로 설정하면 컨트롤을 Grid Cell에 가득 채운다는 의미이고, grabExcessHorizontalSpace을 true로 설정하는것은 Grid Cell 자체를 Container의 영역에 채운다는 의미이다.
  • Cell의 크기는 속한 컬럼에 동일하게 적용되므로 아래 그림에서 Button 1,2,3,5 중 하나만 grabExcessHorizontalSpace을 true로 설정해도 함께 영향을 받는다. Button 1,2는 horizontalAlignment를 FILL로 설정했고, Button3은 CENTER, Button5는 BEGINNING으로 설정되었다.
  • 한가지 더, width를 설정했을 때는 어떻게 될까? width를 설정하면 hAlign = FILL로 해도 소용이 없다. width를 우선하기 때문이다. 하지만 여기서 중요한 점은 위젯의 폭에 맞추어 CELL의 크기가 늘어나기 때문에 같은 컬럼의 다른 위젯들에 대해 hAlign=FILL로 하면 동일한 크기로 맞추어 진다.
  • grabH = true로 하고 hAlign = FILL로 했다면 width는 무시되고 CELL을 가득 채운다. 이때도 hAlign을 FILL이 아닌 좌/우/중앙으로 설정하면 width는 그대로 적용된다.
     
  • 오히려 혼란스러운가? 정리해보자.
    • 레이아웃은 CELL의 크기와 위젯의 크기에 의해 결정된다.
    • CELL의 크기에 영향을 주는 것은 grab이나 span 속성이다.
    • 위젯의 크기에 영향을 주는 것은 width, height이다. 다만 그 위젯의 크기 때문에 위젯을 담는 CELL의 크기에도 영향을 준다.
    • align은 위젯의 크기에 영향을 주지 않고 CELL의 배치만 결정한다. 예외적으로 FILL일 경우에만 위젯의 크기가 설정되지 않았으면 CELL을 가득 채우도록 위젯의 크기를 늘려준다.


뒤늦게 발견했다. eclipse.org에 이미 훌륭한 글이 있다.
http://www.eclipse.org/articles/Article-Understanding-Layouts/Understanding-Layouts.htm

'Project 자료수집' 카테고리의 다른 글

RAP 이해하기 - Tomcat에 Launching  (0) 2013.10.26
RAP 개발 관련 링크  (0) 2013.10.07
[java.core] 간단한 String XML 파싱 예제  (0) 2013.09.23
IMDB XML 가져오기  (0) 2013.09.23
API 및 RAP  (0) 2013.09.17