TITLE:JSliderでクリックした位置にノブをスライド

Posted by terai at 2009-02-09

JSliderでクリックした位置にノブをスライド

JSliderをマウスでクリックした場合、その位置にノブをスライド、続けてドラッグ可能にします。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

slider.setUI(new MetalSliderUI() {
  protected TrackListener createTrackListener(JSlider slider) {
    return new TrackListener() {
      @Override public void mousePressed(MouseEvent e) {
        JSlider slider = (JSlider)e.getSource();
        switch (slider.getOrientation()) {
          case JSlider.VERTICAL:
            slider.setValue(valueForYPosition(e.getY()));
            break;
          case JSlider.HORIZONTAL:
            slider.setValue(valueForXPosition(e.getX()));
            break;
        }
        super.mousePressed(e); //isDragging = true;
        super.mouseDragged(e);
      }
      @Override public boolean shouldScroll(int direction) {
        return false;
      }
    };
  }
});

解説

  • 左と上
    • デフォルトの動作
    • ノブをクリックすると、ドラッグ可能
    • ノブ以外の場所をクリックすると、タイマーでノブの幅ずつその方向に移動
  • 右と下
    • クリックした位置までスライドし、続けてドラッグ可能
      • 目盛の間隔が広い場合、ノブがスナップされてマウスカーソルからはずれてしまい、続けてドラッグできない場合がある
    • メディアプレイヤー風?

参考リンク

コメント