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();
}
}
}
这是我们当前的事件监听器。是否需要不同的监听器来执行我想要的操作?
最佳答案
不需要,您只需要删除 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();
}
}
这是另一个显示相同内容的示例,它将在您移动 slider 时打印 slider 的值:
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);
}
关于java - 如何在 slider 移动时而不只是在松开鼠标时调用 Action 监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369077/