Recent Posts
Recent Comments
Link
11-17 00:00
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

[SWT/JFace] Widget, Control, Label, Button 본문

DEV&OPS/Java

[SWT/JFace] Widget, Control, Label, Button

ALEPH.GEM 2024. 1. 20. 19:54

 

Widget 클래스

모든 위젯들의 상위 클래스 입니다. 그러나 위젯을 상속받거나 코드에서 바로 사용하면 안됩니다.

하나의 구조로 모든 위젯들을 단일화 하기 위함이기 때문입니다.

  • setData(String Object) : 위젯에 객체를 붙임. 문자열로 접근 가능.
  • getData(String) : 위젯에서 문자열에 대응하는 데이터와 관련된 객체를 반환
  • getStyle() : 위젯의 스타일에 해당하는 정수를 반환
  • getDisplay() : 위젯과 관련된 Display 객체를 반환
  • toString() : 위젯 클래스를 표현하는 문자열 반환
  • dispose() : 위젯과 위젯 자원에 대한 할당을 해제.
  • isDisposed() : 위젯의 할당을 해제했는지에대한 boolean 값 반환

 

Control 클래스

Control클래스의 객체들은 운영체제와 짝을 이루는 부분이 있어서 클래스의 hnadle 필드를 통해서 직접 운영체제 API에 접근 할 수 있습니다.

  • getSize() : 위젯 크기를 표현하는 Point 객체를 반환.
  • setSize(int, int) : 너비와 길이 값을 바탕으로 위젯 크기를 설정
  • setSize(Point) : Point 객체에 따라 위젯 크기를 설정
  • computeSize(int, int) : 위젯 내용을 모두 보여줄 수 있는 면적을 반환
  • computeSize(int, int, boolean) : 위젯 내용을 모두 보여줄 수 있는 면적을 반환하고, 위젯 특성이 바뀌었는지 알려 줌.
  • pack() : 위젯을 선호하는 크기로 재조정
  • pack(boolean) : 위젯을 선호하는 크기로 재조정하고, 위젯 특성이 바뀌었는지 알려줌.

해상도와 플랫폼 차이 때문에 getSize()보다 pack()을 권장합니다.

알아서 크기 조절이 되기 때문입니다.

그래서 컨테이너에 위젯을 추가할 때마다 pack()을 호출해야 합니다.

 

각 Control은 그 부모에 따라 각기 다른 상대적인 참조 위치를 사용합니다.

그래서 아래 처럼 위치를 조정하는 메소드들이 존재합니다.

Cotrol 위치를 설정하고 반환하는 메소드
  • getLocation() : 위젯의 부모에 대한 상대 위치를 반환
  • setLocation(int, int) : 위젯의 부모에 대한 상대 위치를 설정
  • getBounds() : 위젯의 크기와 부모에 대한 상대 위치를 반환
  • setBounds(int, int, int, int) : 위젯의 크기와 부모에 대한 상대 위치를 설정
  • toControl(int, int) : 화면 기준 좌표를 컨트롤 기준 Point 값으로 바꿈
  • toControl(Point) : 화면 기준 Point 값을 컨트롤 기준 Point 값으로 바꿈
  • toDisplay(int, int) : 컨트롤 기준 좌표를 컨트롤 기준 Point 값으로 바꿈
  • toDisplay(Point) : 컨트롤 기준 Point 값을 Point 값으로 바꿈.

 

Label

Label 클래스는 문자열이나 이미지를 담아 표시하는 기능입니다.

각각의 스타일 값이 정수 값으로 저장되어 있는데 이를 상수로 표현하게 됩니다.

예를 들어 문자열의 배치는 SWT.CENTER, SWT.LEFT, SWT.RIGHT 처럼 다루면 됩니다.

  • getText() : Label의 문자열을 반환
  • setText() : Label의 문자열을 지정
  • getAlignment() : 정수값으로 표현되는 Label의 문자열의 배치를 반환
  • setAlignment(int) : SWT.상수값 에 따라 문자열의 배치를 설정
  • getImage() : Label의 이미지 객체를 반환
  • setImage(Image) : Image객체를 Label에 설정

 

Button

푸시 버튼 : SWT.PUSH

Button push = new Button(shell, SWT.PUSH | SWT.LEFT);
push.setText("버튼");
push.pack();

 

| 기호로 스타일과 함께 버튼 생성자에 지정해줄 수 있습니다.

 

화살표 버튼의 예

Button push1 = new Button(shell, SWT.ARROW | SWT.RIGHT);
push1.setText("오른쪽");
push1.pack();

 

토글 버튼은 SWT.TOGGLE 을 사용합니다.

 

체크 버튼은 배열로 보통 사용합니다.

Button[] checks = new Button[2];
checks[0] = new Button(shell, SWT.CHECK);
checks[0].setText("선택1");
checks[0].setLocation(100, 50);
checks[0].pack();
	
checks[1] = new Button(shell, SWT.CHECK);
checks[1].setText("선택2");
checks[1].setLocation(300, 50);
checks[1].pack();

 

라디오 버튼 SWT.RADIO

체크 버튼과 다르게 목록 중 반드시 하나만 선택하도록 하는 버튼입니다.

역시 체크버튼 처럼 배열로 보통 사용합니다.

Button[] radios = new Button[2];
radios[0] = new Button(shell, SWT.RADIO);
radios[0].setSelection(true);
radios[0].setText("선택1");
radios[0].setLocation(100, 50);
radios[0].pack();

radios[1] = new Button(shell, SWT.RADIO);
radios[1].setText("선택2");
radios[1].setLocation(300, 50);
radios[1].pack();
	
for(int i = 0; i<radios.length;i++) {
	if(radios[i].getSelection()) {
		System.out.println(i);
	}
}

 

라디오 버튼의 그룹을 모으고 관리하기 위한 기능은 org.eclipse.jface.preference 패키지에 RadioGroupFieldEditor 클래스에 있는데 나중에 더 자세히 다뤄보겠습니다.

 

 

 

 

 

 

 

 

 

 

 

728x90