Изменить значение ползунка после перетаскивания ручки

Я пытаюсь использовать JSlidersetValue(int) автоматически перемещать положение ручки к ближайшей отметке, когда пользователь заканчивает ее перетаскивание. Положение устанавливается правильно, когда пользователь щелкает, но не когда он перетаскивает ручку. Как мне исправить это?

    /**
     * Called when the slider is moved.
     * 
     * @access  public
     * @param   ChangeEvent
     * @return  void
     */
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();

        if ( ! source.getValueIsAdjusting() ) {
            //let's only allow users to increment by TIMER_SPACING
            int fps = (int) source.getValue();
            int temp = fps % TIMER_SPACING;
            if ( temp > TIMER_SPACING / 2 ) {
                fps += TIMER_SPACING - temp;
            } else {
                fps -= temp;
            }

            source.setValue(fps);

            if ( fps == 0 ) {
                timer.stop();
            } else {
                if ( ! timer.isRunning() ) {
                    timer.start();
                }
                timer.setDelay(1000 / fps);
            }
        }
    }

1 ответ

Решение

Довольно простое решение, спасибо Эндрю Томпсон:

slider.setSnapToTicks(true);
Другие вопросы по тегам