スライダー


値の設定

ユーザーに、時間軸のような範囲の決まった一次元の値を設定してもらう場合
通常は、スライダーを用いる方法が最も直観的と考えられるでしょう
スライダーは javax.swing.JSlider で実装されています
java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--javax.swing.JSlider

public class JSlider extends JComponent
	implements SwingConstants, Accessible
このクラスの性質は、極めて JProgressBar に似ています
コンストラクタは、次のようなものが公開されています

public JSlider()
public JSlider(int orientation)
public JSlider(int min , int max)
public JSlider(int min , int max , int value)
public JSlider(int orientation , int min , int max , int value)
public JSlider(BoundedRangeModel brm)

orientation には、SwingConstants の VERTICAL または HORIZONTAL を指定します
min には最小値、max には最大値、value には現在値を指定します
省略した場合、最小値は 0、最大値は 100、現在地は最小値と最大値の平均となります
brm には、バーのモデル情報を格納した BoundedRangeModel を指定します
import java.awt.*;
import javax.swing.*;

public class Test extends JApplet {
	public void init() {
		JSlider slider = new JSlider();

		getContentPane().setLayout(new FlowLayout());
		getContentPane().add(slider);
	}
}


これが、単純な 0 〜 100 までの値を設定するスライダーです
やはり、値の設定や取得は JProgressBar と同じです

public void setMinimum(int n)
public void setMaximum(int n)
public void setValue(int n)
public int getMinimum()
public int getMaximum()
public int getValue()

これらのメソッドについては、名前も機能も JProgressBar とソース互換です

さらに、スライダーには目盛りとラベルを指定することができます
このとき、ラベルは大目盛り、目盛りは小目盛りの値を参考に作られます
大目盛りは JSlider.setMajorTickSpacing() で設定し
JSlider.getMajorTickSpacing() メソッドで取得することができます
また、小目盛りは JSlider.setMinorTickSpacing() で設定し
JSlider.getMinorTickSpacing() で取得することができます

public void setMajorTickSpacing(int n)
public void setMinorTickSpacing(int n)
public int getMajorTickSpacing()
public int getMinorTickSpacing()

n には、それぞれの目盛り単位を表す値を指定します
例えば、最小値が 0、最大値が 100 の場合で 10 を指定すれば
目盛りは 0、10、20、30、…というように増えていきます

ただし、デフォルトでスライダーはこれらの目盛りを非表示状態に設定しています
これを表示状態に変更するには、大目盛りは setPaintLabels()
子目盛りは setPaintTrack() メソッドを使って true を指定します
もちろん、これらの値を取得するための get_() メソッドも提供されています

public void setPaintLabels(boolean b)
public void setPaintTrack(boolean b)
public boolean getPaintLabels()
public boolean getPaintTrack()

b には表示するかどうかを表す論理値を指定します
import java.awt.*;
import javax.swing.*;

public class Test extends JApplet {
	public void init() {
		JSlider slider = new JSlider();
		slider.setPaintLabels(true);
		slider.setPaintTicks(true);
		slider.setMajorTickSpacing(10);
		slider.setMinorTickSpacing(5);

		getContentPane().add(slider , BorderLayout.NORTH);
	}
}


これが、目盛りを表示した状態のスライダーです
薄い線が子目盛り、値が大目盛りを反映して描画されています



前のページへ戻る次のページへ