2014년 1월 15일 수요일

SWT - 슬라이더(Slider)




슬라이더(Slider)


Slider 컨트롤은 윈도우의 스크롤바와 비슷합니다. 스크롤바는 스크롤하는 항목과 연결되어 있고 해당 문맥 밖에서의 사용은 불가능하지만, Slider는 정수 범위에서의 어떤 값을 선택하기 위한 컨트롤로 사용한다는 점에서 둘은 서로 다릅니다.


  • Slider의 선택값의 범위는 setMinimum()과 setMaximum() 메서드로 설정합니다.
  • 클릭하거나 드래그할 수 있는 사각형 슬라이더는 썸(thumb)이라 합니다.
  • setThumb() 메서드를 통해 썸의 크기를 설정하는 값은 정수여야 합니다.
  • 썸의 크기는 Slider 전체 범위 중 썸의 크기만큼의 비율로 결정됩니다. 만약 범위가 0~100 이고, 썸의 크기가 10 이라면, 썸은 Slider 컨트롤의 10%의 크기가 됩니다.
  • 양쪽 끝의 화살표는 증가분(increment)으로 설정한 만큼 썸을 움직입니다.
  • 썸과 화살표 사이의 공간을 클릭하면 페이지 증가분(pageIncrement)만큼 썸을 이동합니다.


setValues() 메서드는 위에서 언급한 Slider와 연관된 모든 값을 한번에 설정합니다.

/*
 * int selection : 썸(thumb)의 초기위치
 * int minimum : 최소값
 * int maximum : 최대값 
 * int thumb : 썸의 크기
 * int increment : 끝의 화살표 이동값
 * int pageIncrement : 페이지 증가분
 */
setValues(int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement);



▶ 예제코드

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
51
52
package com.swtjface.Ch5;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DragDetectEvent;
import org.eclipse.swt.events.DragDetectListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Slider;
 
/**
 * 슬라이더는 스크롤바와 비슷하다.
 * 
 * @since 2013. 6. 8.
 * @author Cremazer
 * 
 */
public class Ch5Slider extends Composite {
    Label label;
    public Ch5Slider(Composite parent) {
        super(parent, SWT.NONE);
        setLayout(new FillLayout());
        
        label = new Label(this, SWT.CENTER|SWT.BORDER);
        label.setBounds(30,60,110,15);
        
        final Slider slider = new Slider(this, SWT.HORIZONTAL);
        
        /*
         * int selection : 썸(thumb)의 초기위치
         * int minimum : 최소값
         * int maximum : 최대값 
         * int thumb : 썸의 크기
         * int increment : 끝의 화살표 이동값
         * int pageIncrement : 페이지 증가분
         */
        slider.setValues(1000, 400, 1600, 200, 10, 100);
        slider.addDragDetectListener(new DragDetectListener() {
            
            @Override
            public void dragDetected(DragDetectEvent arg0) {
                setText(slider.getSelection());
                
            }
        });
    }
 
    protected void setText(int selection) {
        label.setText(String.valueOf(selection));
    }
}
 



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
package com.swtjface.Ch5;
 
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
 
/**
 * 슬라이더 테스트
 *
 * @since 2013. 6. 8.
 * @author Cremazer
 *
 */
public class Ch5SliderTest extends ApplicationWindow {
    public Ch5SliderTest() {
        super(null);
    }
 
    protected Control createContents(Composite parent) {
        Ch5Slider slider = new Ch5Slider(parent);
 
        getShell().setText("Widget Window");
        return parent;
    }
 
    public static void main(String[] args) {
        Ch5SliderTest tc = new Ch5SliderTest();
        tc.setBlockOnOpen(true);
        tc.open();
        Display.getCurrent().dispose();
    }
 
}
 


▶ 실행결과







댓글 없음:

댓글 쓰기