Recent Posts
Recent Comments
Link
12-08 02:58
Today
Total
관리 메뉴

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

[SWT/JFace] Composite 클래스 본문

DEV&OPS/Java

[SWT/JFace] Composite 클래스

ALEPH.GEM 2024. 11. 27. 21:47

 

 

Composite 클래스

컨테이너 위젯은 GUI의 배경 구조를 구성하고 모듈식 코드를 제공합니다.

여러 composite 객체가 다른 composte 객체에 결합될 수 있습니다.

 

Composite 클래스의 메소드
  • getChildren() : Control 객체의 배열을 반환
  • getLayout() : composite에 연결한 레이아웃을 반환
  • setLayout(Layout) : composite에 연결할 레이아웃을 설정
  • getTabList() : 탭 순서에 따른 Control 객체의 배열을 반환
  • setTabList(Control[]) : Composite의 위젯들의 탭 순서를 설정

 

Composite 클래스는 Scrollable 클래스의 하위 클래스 입니다.

그래서 모든 Composite 클래스는 스크롤바를 가질 수 있습니다.

Scrollabe 클래스의 메소드
  • getClientArea() : Scrollable 객체에서 가능한 화면 표시 면적을 반환
  • computeTrim(int, int, int, int) : 클라이언트 영역을 위한 Composite의 필요 면적을 반환
  • getHorizontalBar() : 수평 스크롤바 객체를 반환
  • getVerticalBar() : 수직 스크롤바 객체를 반환

getSize()가 Control의 면적 크기를 알려주지만 타이틀바, 상태바 등등이 얼만큼의 영역을 차지하는지 알 수 없습니다.

여기서 trim은 Composite 에서 편집 불가능한 영역을 말합니다.

Composite에서 편집 가능한 영역을 클라이언트 영역이라고 부릅니다.

 

 

SashForm

SashForm은 컨트롤들의 크기를 동적으로 조정할 수 있도록 위젯들의 그룹을 지정해서 관리할 수 있는 기능입니다.

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;

public class SashForm extends Composite{
	public SashForm(Composite parent) {
		super(parent, SWT.NONE);
	}
}
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;

public class CompViewer extends ApplicationWindow{

	public CompViewer() {
		super(null);
	}
	
	protected Control createContents(Composite parent) {
		SashForm sf = new SashForm(parent);
		sf.setSize(120, 80);;
		Button button1 = new Button(sf, SWT.ARROW | SWT.UP);
		button1.setSize(120, 40);
		Button button2 = new Button(sf, SWT.ARROW | SWT.DOWN);
		button2.setBounds(0, 40, 120, 40);
		return parent;
	}

	public static void main(String[] args) {
		CompViewer cv = new CompViewer();
		cv.setBlockOnOpen(true);
		cv.open();
		Display.getCurrent().dispose();
	}

}

 

 

TabFolder

여러개의 Composite 객체를 하나의 컨테이너에 담습니다.

탭 인덱스를 통해서 각각에 접근 할 수 있습니다.

메인 인스턴스를 생성한 후에 tab이라고 부르는 TabItem 객체를 생성합니다.

그리고 setText()를 호출하여 탭 레이블에 문자열을 설정합니다.

setControl()으로 탭을 선택할 때 관련된 Control을 보이도록 탭과 Control을 연결합니다.

  • getItemCount() : TabFolder의 TabItem 수를 반환
  • getItems() : TabItem 객체의 배열을 반환
  • getSelection() : 사용자가 어떤 TabItem을 선택했는지 알려줌.
  • setSelection() : 선택될 탭을 설정
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;

public class Ex_Composite extends Composite {
	public Ex_Composite(Composite parent) {
		super(parent, SWT.NONE);

		parent.getShell().setText("Composite 예제");
				
		SashForm cc1 = new SashForm(this);
		cc1.setLocation(0,0);
		cc1.pack();
		
		SashForm cc2 = new SashForm(this);
		cc2.setLocation(125, 25);
		cc2.pack();
		
		pack();
	}
}
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;

public class WidgetWindow extends ApplicationWindow {

	public WidgetWindow() {
		super(null);
	}
	
	protected Control createContents(Composite parent) {
		//탭폴더 생성
		TabFolder tf = new TabFolder(parent, SWT.NONE);
		TabItem ti = new TabItem(tf, SWT.NONE);
		ti.setText("탭폴더 예제");
		ti.setControl(new Ex_Composite(tf));
		getShell().setText("위젯 윈도우");
		return parent;
	}

	public static void main(String[] args) {
		WidgetWindow wwin = new WidgetWindow();
		wwin.setBlockOnOpen(true);
		wwin.open();
		Display.getCurrent().dispose();
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90