JavaFX | 주요 컨트롤러 이용 | 슬라이더(Slider)


아날로그 방식으로 “여기부터 여기까지의 값"을 입력하는데 사용되는 것이 “슬라이더"이다. 슬라이더는 마우스로 바(bar)의 노브(knob)를 드래그하여 값을 설정한다. 이것은 javafx.scene.control 패키지 “Slider"라는 클래스되어 있다.

new Slider()
new Slider(최소값, 최대 값, 현재 값)

인수없이 작성하면, 디폴트 상태에서 인스턴스를 생성된다. 인수 최소값, 최대 값, 현재 값을 각각 double로 지정하면 지정된 범위 내에서 값을 선택하도록 할 수 있다.

이 Slider는 표시에 관한 세부적인 속성을 가지고 있어 그것들을 설정하는 것으로 표시 방법을 다양하게 조정할 수 있다.

표시 방향을 설정하기

slider.setOrientation(Orientation);

이것은 세로 및 가로 여부를 설정하는 것이다. 인수는 javafx.geometry 패키지 Orientation 클래스의 필드를 지정한다. 이 클래스에는 다음 2개의 클래스 필드가 포함되어 있다.

HORIZONTAL : 가로 방향을 나타내는 값입니다.
VERTICAL : 세로 방향을 나타내는 값입니다.

눈금 표시 ON/OFF하기

slider.setShowTickMarks(boolean);
slider.setShowTickLabels(boolean);

슬라이더에는 숫자 눈금 표시를 할 수 있다. setShowTickMarks는 눈금의 표시를 설정하는 것으로, true로 하면 눈금이 표시된다. 또한 setShowTickLabels는 눈금 내에 최소값, 최대값과 같은 값을 표시한다.

값을 스냅하기

slider.setSnapToTicks(boolean);

설정된 값이 true이면 드래그 했을 때 표시되는 눈금의 위치에 값이 강제로 가지런히 정돈한다. 설정된 값이 false이면 드래그는 제한이 없어지고, 값은 그대로 섬세한 실수값으로 얻을 수 있게 된다.

값을 조작하기

double 값 = slider.getValue();
slider.setValue(double);

Slider의 값은 getValue/setValue으로 조작을 할 수 있다. 결과 값은 실수이다.

그럼 이것도 간단한 사용 예제는 아래와 같다.

package com.devkuma.javafx;
 
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
 
public class App extends Application {
    Label label;
    Slider slider;
    Button button;
     
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) throws Exception {
        label = new Label("This is JavaFX!");
        slider = new Slider(0, 100, 50);
        slider.setShowTickMarks(true);
        slider.setShowTickLabels(true);
        slider.setSnapToTicks(true);
        button = new Button("CLICK");
        button.setOnAction((ActionEvent)->{
            label.setText("VALUE: " + slider.getValue());
        });
        BorderPane pane = new BorderPane();
        pane.setTop(label);
        pane.setCenter(slider);
        pane.setBottom(button);
        Scene scene = new Scene(pane, 320, 120);
        stage.setScene(scene);
        stage.show();
    }
 
}

드래그하여 적당한 값을 설정하고, 버튼을 클릭하면 현재 값이 표시된다. 별도의 버튼이 있는 이유는 Slider 클래스는 액션 이벤트가 지원되지 않기 때문이다.

다만, 그 이외의 이벤트는 준비되어 있으며, 그것들을 이용하여 조작시 처리를 구현할 수 있다. 이것에 대해 다시 한번 설명하기로 하자.