Как мне вызвать actionlistener, когда движется слайдер, а не только когда я отпускаю мышь? - PullRequest
1 голос
/ 06 декабря 2010
class AngleSlider implements ChangeListener {
        public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();
        if (!source.getValueIsAdjusting()) {

            double dAngle = (double)source.getValue();
            pnlCannon.dCannonAngle=Math.toRadians(dAngle);
            pnlCannon.repaint();

        }
    }
}

Это наш текущий прослушиватель событий.Требуется ли другой слушатель, чтобы делать то, что я хочу?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Нет, вам нужно всего лишь удалить проверку getValueIsAdjusting().Итак, это перекрасит вашу пушку, когда вы двигаете мышью:

class AngleSlider implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();

        double dAngle = (double)source.getValue();
        pnlCannon.dCannonAngle=Math.toRadians(dAngle);
        pnlCannon.repaint();
    }
}

Это еще один пример, показывающий то же самое, он будет печатать значение ползунка при его перемещении:

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");

    JSlider slider = new JSlider();

    slider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent ce) {
            System.out.println(((JSlider) ce.getSource()).getValue());
        }
    });

    frame.add(slider);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}
0 голосов
/ 06 декабря 2010

!source.getValueIsAdjusting() препятствует выполнению формы кода обновления.

Почему вы считаете, что условие необходимо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...