ControlsFX の RangeSlider の使い方

ここでは ControlsFX の RangeSlider コントロールの使用方法について説明します。

RangeSlider は設定した最大値、最小値のなかで、任意の範囲をスライダーを用いて設定できます。

例えば最大値として 100、最小値として 0 を設定しておき、その中で任意の上限値と下限値の範囲 (例えば 20 から 80 の間など) を指定できます。 検索範囲の絞り込みなどを指定するのにも、直感的にわかりやすく大変便利です。

また、水平方向のスライドだけでなく、垂直方向のスライド、あるいは、メモリの有無など、カスタマイズ範囲も広いです。

RangeSlider の基本的な使用例

FXML Test1.fxml は次の通りです。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.text.Font?>
<?import org.controlsfx.control.RangeSlider?>

<BorderPane
	xmlns="http://javafx.com/javafx/8.0.171"
	xmlns:fx="http://javafx.com/fxml/1"
	fx:controller="application.Test1Controller">
	<center>
		<HBox
			prefHeight="100.0"
			prefWidth="350.0"
			BorderPane.alignment="CENTER">
			<children>
				<Label
					fx:id="label1"
					alignment="CENTER_RIGHT"
					prefWidth="50.0"
					text="0"
					textAlignment="RIGHT">
					<HBox.margin>
						<Insets
							bottom="20.0"
							left="20.0"
							right="10.0"
							top="20.0" />
					</HBox.margin>
					<font>
						<Font size="24.0" />
					</font>
				</Label>
				<RangeSlider
					fx:id="rangeSlider1"
					blockIncrement="5.0"
					highValue="80.0"
					lowValue="20.0"
					majorTickUnit="10.0"
					max="100.0" min="0.0"
					minorTickCount="5"
					prefHeight="54.0"
					prefWidth="196.0"
					showTickLabels="true"
					showTickMarks="true"
					snapToTicks="true">
					<HBox.margin>
						<Insets top="10.0" />
					</HBox.margin>
				</RangeSlider>
				<Label
					fx:id="label2"
					prefWidth="50.0"
					text="100">
					<HBox.margin>
						<Insets
							bottom="20.0"
							left="10.0"
							right="20.0"
							top="20.0" />
					</HBox.margin>
					<font>
						<Font size="24.0" />
					</font>
				</Label>
			</children>
		</HBox>
	</center>
</BorderPane>

コントローラクラス Test1Controller.java は次の通りです。

package application;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import org.controlsfx.control.RangeSlider;

public class Test1Controller {

	@FXML
	private Label label1;

	@FXML
	private Label label2;

	@FXML
	private RangeSlider rangeSlider1;

	@FXML
	void initialize() {

		rangeSlider1.lowValueProperty().addListener(
			new ChangeListener<Number>() {
				@Override
				public void changed(
					ObservableValue<? extends Number> observable,
					Number oldValue, Number newValue) {
					setValue(label1, newValue);
				}
			}
		);

		rangeSlider1.highValueProperty().addListener(
			new ChangeListener<Number>() {
				@Override
				public void changed(
					ObservableValue<? extends Number> observable,
					Number oldValue, Number newValue) {
					setValue(label2, newValue);
				}
			}
		);

		rangeSlider1.setHighValue(80.0);
		rangeSlider1.setLowValue(20.0);

	}

	void setValue(Label label, Number number) {
		String v = String.format("%d",number.intValue());
		label.setText(v);
	}
}

RangeSlider で設定している上限値、下限値はそれぞれ getHightValue()getLowValue() メソッドで取得できます。

RangeSliderhighValueProperty()highLowProperty() 経由で、変更イベントを処理するリスナーを追加しています。

呼び出すプログラムは特に何も特別なことはありません。一応載せておきます。

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXMLLoader;

public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			FXMLLoader loader = new FXMLLoader(getClass().getResource("Test1.fxml"));
			BorderPane root = (BorderPane) loader.load();
			Scene scene = new Scene(root,350,200);
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		launch(args);
	}
}

以上、RangeSlider コントロールの使用方法について説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門