SWT/JFace Layout

FillLayout

내부 위젯을 왼쪽에서 오른쪽으로, 위에서 아래로 순차적으로 채워지게 표현하는 레이아웃

FillLayout 생성시 SWT.HORIZONTAL(가로), SWT.VERTICAL(세로) 어느 인자를 주느냐에 따라 채워지는 방향이 달라 짐.

 

[소스코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class FillComposite extends Composite {
 
    public FillComposite(Composite parent) {
        super(parent, SWT.NONE);
        
        FillLayout fillLayout = new FillLayout(SWT.HORIZONTAL);
        this.setLayout(fillLayout);
        
        for(int i = 0; i < 8++i) {
            Button btn = new Button(this, SWT.PUSH);
            btn.setText("Sample Button " + i);
        }
    }
}
cs


[결과화면]


[소스코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class FillComposite extends Composite {
 
    public FillComposite(Composite parent) {
        super(parent, SWT.NONE);
        
        FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
        this.setLayout(fillLayout);
        
        for(int i = 0; i < 8++i) {
            Button btn = new Button(this, SWT.PUSH);
            btn.setText("Sample Button " + i);
        }
    }
}
cs


[결과화면]




RowLayout

내부 컴포넌트를 행으로 배치하고 부모 컴포넌트보다 내부 인자의 크기가 더 커지는 경우 다음 행으로 넘어가서 위젯을 배열한다.

Composite에 추가 된 자식위젯의 개별 크기를 컨트롤 하기 위해서 RowData를 추가할 수 있다.


RowLayout properties

  • wrap: 위젯이 컨테이너의 공간을 넘어갈 때 다음 줄로 내릴것인지 결정한다. 기본값 true
  • pack: 위젯의 내용에 최적으로 크기를 조절할것인지 결정한다. 기본값 true
  • justify: 위젯을 컨테이너의 공간에 동일한 간격으로 펼쳐놓을것인지를 결정한다. 기본값 false
  • marginLeft: 컨테이너 안쪽에서 위젯들이 놓일 영역사이의 좌측 여백
  • marginTop: 컨테이너 안쪽의 위쪽 여백
  • marginBottom: 컨테이너 안쪽의 아래쪽 여백
  • marginRight: 컨테이너 안쪽의 오른쪽 여백
  • spacing: 위젯들간의 간격
 

[소스코드] 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class RowComposite extends Composite {
 
    public RowComposite(Composite parent) {
        super(parent, SWT.NONE);
        RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
        this.setLayout(rowLayout);
        
        
        Button btnFirst = new Button(this, SWT.PUSH);
        btnFirst.setText("LayoutData 지정");
        btnFirst.setLayoutData(new RowData(200200)); // new RowData(width, height)
        
        for(int i = 0; i < 8++i) {
            Button btn = new Button(this, SWT.PUSH);
            btn.setText("Sample Button " + i);
        }
    }
}
 
cs


[결과화면]


TODO

소스에 문제가 없다면 리사이즈 하는 경우 RowLayout은 다음행으로 버튼을 이동시켜야 하는데 그렇게 동작하지 않고 있다. 무엇이 문제인지는 추후에 확인해보고 업데이트 해야할 것 같다.



GridLayout

그리드 형태의 격자무늬로 위젯을 배열한다.

new GridLayout(numColumns, makeColumnsEqualWidth) 으로 열의 개수, 컬럼이 동일 사이즈를 갖을지를 결정한다.

GridLayout에서 중요한 것은 내부 위젯의 개별 스타일을 결정하는 GridData의 세팅이다.


GridData 생성자에 적용가능한 스타일 상수

 스타일 상수

 설명

 GridData.FILL_HORIZONTAL

 비어있는 공간을 채우기 위해 셀을 수평으로 확장.

 GridData.FILL_VERTICAL

 비어있는 공간을 채우기 위해 셀을 수직으로 확장.

 GridData.FILL_BOTH

 비어있는 공간을 채우기 위해 셀을 수직, 수평으로 확장.

 GridData.HORIZONTAL_ALIGN_BEGINNING

 셀의 내용을 왼쪽으로 정렬.

 GridData.HORIZONTAL_ALIGN_END

 셀의 내용을 오른쪽으로 정렬.

 GridData.HORIZONTAL_ALIGN_CENTER

 셀의 내용을 수평 가운데 정렬.

 GridData.HORIZONTAL_ALIGN_FILL

 셀의 내용을 셀안에 비어 있는 수평 공간을 채우기 위해 확장.

 GridData.VERTICAL_ALIGN_BEGINNING

 셀의 내용을 위쪽으로 정렬.

 GridData.VERTICAL_ALIGN_END

 셀의 내용을 아래쪽으로 정렬.

 GridData.VERTICAL_ALIGN_CENTER
 셀의 내용을 수직 가운데 정렬.
 GridData.VERTICAL_ALIGN_FILL 셀의 내용을 셀 안에 비어있는 수직 공간을 채우기 위해 확장.


GridData properties

 Properties

 Default

 설명

 widthHint

 SWT.DEFAULT

 열의 최소 너비로 SWT.DEFAULT는 최소 너비가 지정되어 있지 않다는 것을 의미

 heightHint

 SWT.DEFAULT

 열의 최소 높이로 SWT.DEFAULT는 최소 높이가 지정되어 있지 않다는 것을 의미

 horizontalIndent

 0

 셀의 왼쪽 가장자리부터 해당 컨트롤까지의 픽셀 수

 horizontalSpan

 1

 그리드에서 이 셀이 차지하는 열의 개수

 verticalSpan 1 그리드에서 이 셀이 차지하는 행의 개수


[소스코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
public class GridComposite extends Composite {
 
    public GridComposite(Composite parent) {
        super(parent, SWT.NONE);
        
        GridLayout gridLayout = new GridLayout(4false);
        this.setLayout(gridLayout);
        
        // 첫 번째 버튼만 GridData 적용
        Button firstBtn = new Button(this, SWT.PUSH);
        firstBtn.setText("horSpan2, verSpan2");
        GridData data = new GridData(GridData.FILL_BOTH);
        data.horizontalSpan = 2;
        data.verticalSpan = 2;
        firstBtn.setLayoutData(data);
        
        for(int i = 0; i < 23++i) {
            Button btn = new Button(this, SWT.PUSH);
            btn.setText("Sample Button " + i);
        }
    }
}
cs


[결과화면]



다운로드

Layout.zip


이 글을 공유하기

댓글

Email by JB FACTORY