TITLE:JSliderでクリックした位置にノブをスライド
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2009-07-27
*JSliderでクリックした位置にノブをスライド [#n7414230]
JSliderをマウスでクリックした場合、その位置にノブをスライド、続けてドラッグ可能にします。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTOt05WV7I/AAAAAAAAAc0/Eobj6KIAQzk/s800/JumpToClickedPositionSlider.png)

**サンプルコード [#o79573fb]
#code(link){{
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;
      }
    };
  }
});
}}

**解説 [#bd0e40a6]
-左と上
--デフォルトの動作
--ノブをクリックすると、ドラッグ可能
--ノブ以外の場所をクリックすると、タイマーでノブの幅ずつその方向に移動

-右と下
--クリックした位置までスライドし、続けてドラッグ可能
---目盛の間隔が広い場合、ノブがスナップされてマウスカーソルからはずれてしまい、続けてドラッグできない場合がある
--メディアプレイヤー風?

**参考リンク [#w99369c4]
-[http://stackoverflow.com/questions/518471/jslider-question-position-after-leftclick JSlider question: Position after leftclick - Stack Overflow]

**コメント [#o91edc64]
#comment