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 |