이미지출처 : www.mobilefish.com
EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)
SWT에서는 다음의 5가지 Dialog를 제공하고 있다.
- ColorDialog
- DirectoryDialog
- FileDialog
- FontDialog
- MessageBox
하지만 필요에따라 자신만의 Dialog를 만들어 쓸 일이 생기는데..
간단한 SlideDialog의 예제로 알아보자.
Code:
private IWorkbenchWindow window; | |
private Shell customDialog; | |
private Button buttonOK; | |
private Button buttonCancel; | |
private boolean isSetting; | |
private float density; | |
| |
private Listener listener = new Listener() { | |
public void handleEvent(Event event) { | |
if (event.widget == buttonOK) { | |
isSetting = true; | |
} else { | |
isSetting = false; | |
} | |
customDialog.close(); | |
customDialog.dispose(); | |
} | |
| |
}; | |
| |
private void initialize() { | |
customDialog = new Shell(window.getShell(), SWT.APPLICATION_MODAL| SWT.DIALOG_TRIM); | |
customDialog.setText("Setting Density"); | |
customDialog.setSize(210, 100); | |
| |
buttonOK = new Button(customDialog, SWT.PUSH); | |
buttonOK.setText("OK"); | |
buttonOK.setBounds(10, 40, 80, 25); | |
| |
buttonCancel = new Button(customDialog, SWT.PUSH); | |
buttonCancel.setText("Cancel"); | |
buttonCancel.setBounds(110, 40, 80, 25); | |
| |
final Slider slider = new Slider (customDialog, SWT.HORIZONTAL); | |
slider.setBounds (10, 10, 180, 24); | |
slider.setIncrement(10); | |
slider.setMaximum(109); | |
slider.setToolTipText("MIN <--!--> MAX"); | |
buttonOK.addListener(SWT.Selection, listener); | |
buttonCancel.addListener(SWT.Selection, listener); | |
slider.addListener (SWT.Selection, new Listener () { | |
public void handleEvent (Event event) { | |
density = slider.getSelection()*0.01f; | |
} | |
}); | |
} | |
public void run(IAction action) { | |
initialize(); | |
customDialog.open(); | |
| |
// sleep during dialog work. dialog 가 닫힐때까지 기다리게 해준다. | |
while (!customDialog.isDisposed()) { | |
if (!window.getShell().getDisplay().readAndDispatch()) | |
window.getShell().getDisplay().sleep(); | |
} | |
| |
if(isSetting) { | |
System.out.println("Density : "+density); | |
} | |
} |
코드 후반의 while문 부분이 없다면, Dialog에서 어떤 조작을 하기도 전에 if문이 실행되버리니 유의해야 한다.
by 月風