Java SWT에서 Spinner 만들기

 

Java 프로그램 작성시 Spinner를 만들어 보도록 하겠습니다.

 

원래는 Spinner를 만들어야지 하다가.. 갑자기 Spinner가 생각이 안나서 텍스트와 버튼을 조합해서 직접 만들어봤었습니다.

꼭 이런 경우에는... 이름이 생각 나지 않다가

다 만들고 나면 이름이 생각나서 삽질했다는 생각이 들게 하네요.

 

 

1. Spinner 원래 모양

 

원래 Spinner 는 아래와 같이 생겼습니다.

텍스트 란이 있고, 그 옆에 상하 버튼이 있어서 누르면 수치가 변경되게 합니다.

 

 

만드는 방법은 간단합니다.

 

Spinner spinner = new Spinner(shell, SWT.BORDER);
spinner.setMinimum(0);
spinner.setMaximum(1000);
spinner.setSelection(500);
spinner.setIncrement(1);
spinner.setPageIncrement(100);

 

생성을 하면서 옵션의 의미만 알면 어렵지 않습니다.

 

setMinimum : 최소값을 정해줍니다. 최소값인 상태에서 아무리 값을 낮추는 버튼을 클릭해도 변경되지 않습니다.

 

setMaximum : 최대값을 정해줍니다.

 

setSelection : 초기값을 정해줍니다.

 

setIncrement : 오른쪽 화살표를 클릭했을 때, 증가/감소 되는 수치를 정해줍니다.

 

setPageIncrement : 키보드에서 Page Up/Page Down 키를 눌렀을 때, 변경되는 수치를 정해줍니다.

 

 

2. Spinner 변형 모양

 

삽질이라고 생각했던 부분은 아래와 같습니다.

일반적인 Spinner 와 다른 점은 텍스트가 아닌 콤보 창으로 되어 있다는 것입니다.

 

 

위의 이미지대로 만들려고 직접 구현을 하게 됐는데, 실제 Spinner 에서는 위와 같은 변형된 형태를 만들 수 없어서... 그나마 삽질이 아닌 형태로 되었습니다.

 

처음에는 Spinner에서 텍스트를 콤보로 바꿀 수 있을 줄 알았는데, 정보가 부족해서인지.. 아니면 원래 못 바꾸는지 위의 그림과 같은 형태로 변경할 순 없었습니다.

 

그래서 나름 의미 있는 삽질이 된 코드를 적어보도록 하겠습니다.

 

GUI 는 Java SWT를 사용하였습니다.

 

Combo cmb;                                              // 왼쪽의 콤보
Button btnUp, btnDown;                                  // 콤보, 텍스트 옆에 상하 버튼

// 아래 Composite 영역에서 Layout을 설정한다. 좌우상하 빈공간이 없도록 0으로 설정해준다.
GridLayout gLayout          = new GridLayout(2, false);
gLayout.marginWidth         = 0;
gLayout.marginHeight        = 0;
gLayout.horizontalSpacing   = 0;
gLayout.verticalSpacing     = 0;

// 위의 Spinner가 생성되는 기본 영역이다.
Composite comp = new Composite(parent, SWT.NONE);
comp.setLayout(gLayout);

GridData gTxt = new GridData(150, 16);

// 콤보가 상하 영역을 차지하면서 오른쪽 상하 영역은 버튼이 배치된다.
gTxt.verticalSpan = 2;

cmb = new Combo(comp, SWT.BORDER);
cmb.setLayoutData(gTxt);

btnUp                   = new Button(comp, SWT.ARROW | SWT.UP);
btnUp.setLayoutData(new GridData(20, 13));

btnDown                 = new Button(comp, SWT.ARROW | SWT.DOWN);
btnDown.setLayoutData(new GridData(20, 13));

 

위의 내용은 GUI 만 만들어주는 것이므로 각 버튼에 대한 설정은 직접 만들어줘야 합니다.

 

 

~(^_ ^ )~

 

기본 Spinner 는 숫자만 가능한데, 위와 같이 직접 만든 Spinner 는 콤보도 가능하고 숫자가 아닌 문자를 넣을 수 있어서 활용 범위가 좀 더 넓어진거 같습니다.