質問

これをクリックしJSliderで位置づけにつmajorTickの方向をクリックの代わりにジャンプ、スポットかをクリックします。(スライダーが点47かをクリック5だそうでジャンプには37の代わりに5).方法はありますことをJSliders、を使用しなければいけないもdatastructure?

役に立ちましたか?

解決

として奇妙なことという見方もあるかもしれないが、これは実際に見て感じることである。見 BasicSliderUI, 方法は、必要なものはオーバーライド scrollDueToClickInTrack(int).

するための値を設定します JSlider 最寄りの価値のユーザーをクリックするかが一定になるように派手なパンツの翻訳、マウスの座標から getMousePosition() 有効なトラック値を考慮の位置 Component, ではティングソリューションとの距離とダニ など.幸運なことに、 BasicSliderUI くつ便利な機能このためには: valueForXPosition(int xPos)valueForYPosition(int yPos):

JSlider slider = new JSlider(JSlider.HORIZONTAL);
slider.setUI(new MetalSliderUI() {
    protected void scrollDueToClickInTrack(int direction) {
        // this is the default behaviour, let's comment that out
        //scrollByBlock(direction);

        int value = slider.getValue(); 

        if (slider.getOrientation() == JSlider.HORIZONTAL) {
            value = this.valueForXPosition(slider.getMousePosition().x);
        } else if (slider.getOrientation() == JSlider.VERTICAL) {
            value = this.valueForYPosition(slider.getMousePosition().y);
        }
        slider.setValue(value);
    }
});

他のヒント

この質問は、昔のようなものですが、私は自分自身この問題に出くわしました。これは私のソリューションです:

JSlider slider = new JSlider(/* your options here if desired */) {
    {
        MouseListener[] listeners = getMouseListeners();
        for (MouseListener l : listeners)
            removeMouseListener(l); // remove UI-installed TrackListener
        final BasicSliderUI ui = (BasicSliderUI) getUI();
        BasicSliderUI.TrackListener tl = ui.new TrackListener() {
            // this is where we jump to absolute value of click
            @Override public void mouseClicked(MouseEvent e) {
                Point p = e.getPoint();
                int value = ui.valueForXPosition(p.x);

                setValue(value);
            }
            // disable check that will invoke scrollDueToClickInTrack
            @Override public boolean shouldScroll(int dir) {
                return false;
            }
        };
        addMouseListener(tl);
    }
};

この動作は、OSに由来しています。あなたはそれを再定義し、ユーザーを混乱させるしてもよろしいですか?私はそうは思いません。 ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top