2014년 1월 16일 목요일

SWT - FormLayout




폼 레이아웃(FormLayout)


폼 레이아웃은 서로 크기가 다른 컨트롤을 가지고 있으면서도 크기가 조정되는 폼을 생성하기 위해 사용합니다. 

폼 레이아웃은 FormData 클래스를 사용하여 각각의 컨트롤을 설정할 수 있습니다. 컨트롤을  배치하는 방법은 FormAttachment 클래스를 사용하여 각 컨트롤들의 위치를 명시하여 사용합니다. 



▶ 예제코드



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.swtjface.Ch6;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
 
public class Ch6FormLayoutComposite extends Composite {
 
  public Ch6FormLayoutComposite(Composite parent) {
  super(parent, SWT.NONE);
 
   FormLayout layout = new FormLayout();
  setLayout(layout);
 
   //텍스트를 왼쪽 상단에 위치
  Text t = new Text(this, SWT.MULTI);
  FormData data = new FormData();
  data.top = new FormAttachment(0, 0);
  data.left = new FormAttachment(0, 0);
  data.width = 200;
  data.height = 200;
  t.setLayoutData(data);
 
   //확인 버튼
  Button ok = new Button(this, SWT.NONE);
  ok.setText("Ok");
 
   //취소 버튼
  Button cancel = new Button(this, SWT.NONE);
  cancel.setText("Cancel");
 
   //확인 버튼 위치 설정
  data = new FormData();
  //텍스트 영역 바로 아래 있어야 한다.
  data.top = new FormAttachment(t);
  //취소 버튼 왼쪽에 있어야 한다.
  data.right = new FormAttachment(cancel);
  ok.setLayoutData(data);
 
   //취소 버튼 위치 설정
  data = new FormData();
  data.top = new FormAttachment(t);
  data.right = new FormAttachment(100);
  cancel.setLayoutData(data);
 }
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.swtjface.Ch6;
 
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
 
public class FormLayoutTest extends ApplicationWindow {
 public FormLayoutTest() {
  super(null);
 }
 
  protected Control createContents(Composite parent) {
  Ch6FormLayoutComposite ca = new Ch6FormLayoutComposite(parent);
 
   getShell().setText("Widget Window");
  return parent;
 }
 
  public static void main(String[] args) {
  FormLayoutTest tc = new FormLayoutTest();
  tc.setBlockOnOpen(true);
  tc.open();
  Display.getCurrent().dispose();
 }
 
}



▶ 실행결과






댓글 없음:

댓글 쓰기