출력된 스크린에서, 버튼들이 어떻게 여러 개의 열과 행에 걸쳐있는지 주목하자. 스크린을 리사이징 해봄으로써 GridBagLayout
의 또 다른 특성에 대해서도 알 수 있다. 어느 열과 어느 행이 스크린이 확대됨에 따라 늘어난 공간을 얻을 것인지를 완전히 제어할 수 있다.
GridBagLayout
로 레이아웃된 컨테이너에 추가된 각각의 컴포넌트는 컨스트레인트 오브젝트(constraints object)인 GridBagConstraints
와 반드시 연결되어있어야 한다. 이 오브젝트는 각 컴포넌트의 특정 컨스트레인트들을 레이아웃 매니저에 전달한다.
다양한 타입의 컨스트레인트들이 있는데, 각각은 연결된 컴포넌트의 레이아웃을 제어한다. 각 제약은 클래스의 퍼블릭 필드(public field)이다. 제약들은 컨스트럭터를 통해 한번에 모두 설정할 수도 있고, 또는 그 필드에 직접적인 액세스로 개별적으로 설정할 수도 있다. 이러한 필드들에는 세터(setter) 메소드나 게터(getter) 메소드는 없다.
그렇다면, 이제 각 컨스트레인트들에 대해 알아보자.
anchor
앵커(anchor)는 사용 가능한 공간보다 컴포넌트가 더 작을 경우에 컴포넌트가 드리프트(drift)될 방향을 지정한다. 디폴트 값은 CENTER
이다. .8개의 방위는 또다른 설정을 나타낸다. 각각의 설정은 필드에 지정될 수 있는 상수이다. 가능한 설정들은 다음과 같다.
CENTER EAST NORTH NORTHEAST NORTHWEST SOUTH SOUTHEAST SOUTHWEST WEST
추가적인 컨트레인트 사항들은 현재의 ComponentOrientation
에 기반을 둔 컴포넌트들의 포지션을 가능하게 하는데, 영어에서 보편적으로 쓰이는 수평이면서 왼쪽에서 오른쪽(left-to-right) 방향 맞춤을 위한 설정들은 다음과 같은 상수들로 정해지게 된다.
FIRST_LINE_END (NORTHEAST) FIRST_LINE_START (NORTHWEST) LAST_LINE_END (SOUTHEAST) LAST_LINE_START (SOUTHWEST) LINE_END (EAST) LINE_START (WEST) PAGE_START (NORTH) PAGE_END (SOUTH)
fill
fill의 값은 더 많은 공간이 사용 가능한 경우 컴포넌트의 리사이징을 제어한다. 만약 fill이 NONE
(디폴트 값)으로 설정되어 있다면, GridBagLayout
매니저는 컴포넌트의 적절한 사이즈를 정해주게 된다. 만약 fill이 VERTICAL
로 설정되어 있다면, 레이아웃 매니저는 (물론, 추가적인 공간이 있는 경우에만) 컴포넌트의 높이를 리사이징한다. HORIZONTAL
의 경우에는 레이아웃 매니저는 폭을 리사이징할 것이고, BOTH
로 설정되어 있다면 폭과 넓이에서 사용 가능한 모든 공간을 이용하게 된다.
좀 전의 예제 프로그램 GridBagSample
은 BOTH
를 fill값으로 가진다. VERTICAL
, HORIZONTAL
, 또는 NONE
과 같은 다른 fill 값을 넣어서 프로그램을 한 번 실행해보자. (원하는 결과를 얻기 위한 적절한 fill 설정 라인에 대해서는 설명하지 않겠다.) 예를 들어, 7개의 버튼의 fill을 모두 NONE
으로 설정하면 다음과 같은 결과가 나오게 된다.
gridx
와 gridy
gridx와 gridy는 그리드 상의 컴포넌트의 위치를 지정한다. gridx 변수는 컴포넌트의 가장 왼쪽 위치의 셀을 지정하고, gridy 변수는 컴포넌트의 상단 위치의 셀을 지정한다. Cell (0, 0)은 스크린의 초기점에 있는 셀(왼쪽 위)을 의미한다. 컴포넌트들은 다양한 셀들을 합칠 수 있기 때문에 girdx, girdy 위치는 일반적으로 컴포넌트의 시작 셀이다. 명시적으로 셀에 직접 지정할 수도 있지만, RELATIVE
상수를 사용할 수도 있다. RELATIVE
의 gridx 설정은 이전 컴포넌트의 오른쪽에 새로운 컴포넌트를 만들어낸다. girdy의 경우에는, 이전 컴포넌트 아래쪽에 새로운 컴포넌트가 새로운 열을 시작할 것이다.
gridheight
과 gridwidth
gridheight필드와gridwidth 필드는 수평축(gridwidth)과 수직축(gridheight)에 따라 컴포넌트가 점유해야만 하는 셀들의 수를 지정한다. 행과 열에서 셀의 개수를 지정하는 것과 더불어 RELATIVE
와 REMAINDER
클래스 상수들도 사용할 수 있다. 두 개중 어느 한 필드의 RELATIVE
설정을 지정하는 것은 컴포넌트를 행이나(gridheight) 열(gridwidth) 내에서 마지막에서 두번째(second-to-last)로 만드는 결과를 만든다. REMAINDER
설정은 각각의 행이나 열의 맨 마지막 요소를 지정하기 위해 사용한다.GridBagLayout
을 사용하는 데 익숙해질 때까지는 RELATIVE
와 REMAINDER
보다는 gridx와 gridy, gridheight, gridwidth 설정들을 직접 지정해주는 편이 훨씬 쉬울 것이다. 심지어 익숙해진 단계를 넘어선 후에도, RELATIVE
와 REMAINDER
의 사용을 꺼려 하는 당신을 발견할 지도 모른다.
insets
insets 필드는 컴포넌트 주위에 있는 픽셀 내의 외부 패딩(the external padding)을 지정한다. 패딩이란 빈 공간을 뜻하는데, 컴포넌트 주위의 투명한 경계선이라고 보면 되겠다. insets 필드를 설정할 때는 top, bottom, left, right의 패딩 값을 개별적으로 지정해줘야 한다. GridBagSample
프로그램의 insets 설정이 (0, 0, 0, 0) 이었는데, 이는 일반적인 Insets 오브젝트를 위한 설정임을 주의하자.
ipadx
와 ipady
ipadx 필드와 ipady 필드는 컴포넌트의 내부 패딩을 지정해준다. ipdax 필드는 컴포넌트의 폭에 패딩을 추가하고, ipady필드는 컴포넌트의 높이에 패딩을 추가한다. 예를 들어, ipadx 설정은 컴포넌트의 양쪽 주위에 여분의 공간을 지정해준다.
weightx
와 weighty
예를 들어 사용자가 스크린을 리사이징 하는 경우처럼, weightx와 weighty 설정을 통해 컨테이너 안에서 공간을 사용할 수 있을 때 어느 컴포넌트의 크기를 키우거나 줄일지 제어할 수 있다. weight 설정은 double이다. (insets을 제외한 다른 모든 설정들은 int 값이다.)
일반적으로, weightx와 weighty 설정은 0.0에서 1.0의 범위 안에서 정한다. 0.0으로 설정한다는 것은 컴포넌트에 여유 공간이 전혀 없음을 의미한다. 1.0으로 설정하는 것은 컴포넌트가 모든 여유 공간을 가지는 것을 의미한다. (혹은 적어도 1.0으로 설정된 다른 컴포넌트들과 그 여유 공간을 공유한다는 것을 의미한다.) 비록 설정값을 0.0에서 1.0의 범위 안에 한정하기는 하지만, 모든 설정값이 다 허용된다. 시스템은 특정 행이나 열을 위한 설정값들의 합에 비례하여 공간을 할당할 것이다. 예를 들자면, 1.0으로 설정한 4개의 컴포넌트는 여유 공간을 균일하게 공유하게 될 것이다. 0.0으로 설정한 컴포넌트 3개와 1.0으로 설정한 컴포넌트 1개의 경우에는 모든 여유 공간을 하나의 컴포넌트에 몰아주게 된다. 1개의 0.0 컴포넌트와 2개의 0.5 컴포넌트, 1개의 1.0 컴포넌트라면, 여유 공간의 절반은 1.0 컴포넌트에 할당되고, 2개의 0.5 컴포넌트가 나머지 여유 공간을 나눠가질 것이다.
스크린의 사이즈가 리사이징이 가능하다면, 어떤 weight 설정이 필요한지 고려하는 것을 잊지 말자. Anchor와 weightx/weighty를 결합하여 효과적으로 사용한다면, 리사이징 시에 컴포넌트들이 스크린의 가장자리를 "감싸안거나" , 스크린의 균형을 유지하면서 컴포넌트의 크기를 비례하여 늘릴 수가 있다.
Try changing some of the GridBagConstraints
settings in the GridBagSample
program and see what happens. Here's a table that lists the initial GridBagConstraints
settings in the program. GridBagSample
프로그램 안에서 GridBagConstraints
설정들을 바꿔보고 어떠한 변화가 일어나는지를 살펴보자. 아래의 표는 그 프로그램의 GridBagConstraints
초기 설정값 목록이다.
Component |
gridx |
gridy |
gridwidth |
gridheight |
One |
0 |
0 |
1 |
1 |
Two |
1 |
0 |
1 |
1 |
Three |
2 |
0 |
1 |
1 |
Four |
0 |
1 |
2 |
1 |
Five |
2 |
1 |
1 |
2 |
Six |
0 |
2 |
1 |
1 |
Seven |
1 |
2 |
1 |
1 |
GridBagLayout
와 GridBagConstraints
의 사용에 대한 더 자세한 정보는 Java Tutorial의 How to Use GridBagLayout
을 참조하기 바란다.
GridBagLayout
과 그것과 관련된 GridBagConstraints
을 활용하기 전에, 방안지를 준비하는 것도 좋다. 여러 개의 행과 열에 걸쳐야 하는 스크린을 디자인하는 경우, 미리 방안지의 그리드에 컴포넌트들을 그려보면 도움이 될 것이다.
'HomeWork' 카테고리의 다른 글
EL & JSTL #2 (천천히 배워가자!!) (0) | 2010.01.20 |
---|---|
초간단 JSTL 집고 넘어가자!! (0) | 2010.01.19 |
Thread ^^;; (0) | 2009.12.23 |
JSON#2(JavaScript Object Notation) (0) | 2009.12.22 |
JSON 데이터 (0) | 2009.12.22 |