JavaでJSliderの値の変化を検出する方法をわかりやすく解説
JSliderとは
JSliderはJComponentクラスのサブクラスで、スクロールバーに似たSwingコンポーネントです。指定された範囲の整数値の中から、ユーザーが数値を直感的に選択できるようにします。
JSliderには値の範囲上をスライドできるノブ(つまみ)が備わっており、このノブを操作することで特定の値を選択できます。また、スライダーの値が変更されるとChangeEventが発生し、ChangeListenerインターフェースを実装することでその変化を受け取ることが可能です。
値の変化を検出する方法
スライダーを水平方向に動かしたときの値の変化を画面に反映するには、Graphics2Dクラスを使用し、paint()メソッドをオーバーライドします。ChangeListenerのstateChanged()メソッド内でrepaint()を呼び出すことで、値が変わるたびに再描画が行われ、常に最新の値が表示される仕組みになります。
サンプルコード
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class ValueChangeJSliderTest extends JFrame {
private JSlider slider;
public ValueChangeJSliderTest() {
setTitle("ValueChangeJSlider Test");
slider = new JSlider(JSlider.HORIZONTAL, 0, 20, 1);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent ce) {
repaint();
}
});
setLayout(new BorderLayout());
slider.setBackground(Color.white);
slider.setMajorTickSpacing(1);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
add(slider, BorderLayout.NORTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(new Font("Serif", Font.ITALIC, 25));
g2d.drawString("" + slider.getValue(), 200, 130);
}
public static void main(String[] args) {
new ValueChangeJSliderTest();
}
}
実行結果

コードのポイント
- addChangeListener():スライダーにChangeListenerを登録し、値の変化を監視します。
- stateChanged():値が変更されるたびに呼び出されるメソッドです。ここではrepaint()を呼び出して画面を再描画しています。
- slider.getValue():スライダーの現在の値を取得します。paint()メソッド内でこの値を文字列として描画しています。
- setMajorTickSpacing()/setPaintTicks()/setPaintLabels():目盛りとラベルを表示し、スライダーを見やすくしています。
なお、ドラッグ中に発生する連続的なイベントを除外したい場合は、stateChanged()内でslider.getValueIsAdjusting()がfalseを返すときだけ処理を実行するようにすると、より洗練された動作になります。
-
JavaのJSliderでエクステント(extent)を設定する方法
SwingのJSliderでは、スライダーのエクステント(extent)を設定するためにsetExtent()メソッドを使用します。エクステントとは、スライダーのつまみ(ノブ)がカバーする範囲のサイズのことで、この値を設定すると、ユーザーはスライダーをその範囲以上に移動できなくなります。setExtent()メソッドの基本的な使い方以下のように、JSliderオブジェクトに対してsetExtent()メソッドを呼び出すだけで、エクステントを設定できます。JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 70); slider.se
-
TkinterのScaleウィジェットでEntryウィジェットの値を連動して変更する方法
TkinterのEntry(エントリー)ウィジェットは、ユーザーからの1行入力のみを受け付ける入力用ウィジェットです。特に入力制限を設けていない場合、テキストフィールドにはあらゆる文字を入力できます。このEntryウィジェットの値は、Scale(スケール)ウィジェットを使うことで簡単に変更できます。Scaleウィジェットには最小値と最大値が設定されており、ユーザーは指定された範囲内でのみ値を調整できるようになっています。Scaleウィジェットの値を動かしたときに、同時にEntryウィジェットの値も更新したい場合は、両方のウィジェットに共通して渡す変数を作成します。この共有変数をtextvari