如何在滑块移动时调用actionlistener,而不仅仅是当我放开鼠标时?

时间:2010-12-06 17:17:00

标签: java swing

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 个答案:

答案 0 :(得分:2)

不,您只需要删除 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);
}

答案 1 :(得分:0)

!source.getValueIsAdjusting()阻止执行更新代码表单。

为什么你认为这种情况是必要的?