如何用鼠标滚轮移动JSlider

问题描述:

我有这段代码,但没有任何反应。我不知道为什么degreesSlider.getValue() + 1不起作用。我会感谢任何建议。如何用鼠标滚轮移动JSlider

degreesSlider.addMouseWheelListener(new MouseWheelListener() { 
    @Override 
    public void mouseWheelMoved(MouseWheelEvent e) { 
     int notches = e.getWheelRotation(); 
     if (notches < 0) { 
      System.out.println("Mouse wheel moved UP " + -notches + " notch(es)"); 
      degreesSlider.setValue(degreesSlider.getValue() + 1); 
     } else { 
      System.out.println("Mouse wheel moved DOWN " + notches + " notch(es)"); 
      degreesSlider.setValue(degreesSlider.getValue() - 1); 
     } 
    } 
}); 
+0

是您的侦听器执行的代码? – 2013-02-09 22:13:17

+0

是的。 '跑步: 鼠标滚轮向上移动1档(es)' – 2013-02-09 22:13:51

+2

您为滑块的最小/最大值设置了什么?也许1是你没有注意到什么差异? – 2013-02-09 22:14:28

尝试在How to Write a Mouse Wheel Listener上运行Swing教程中的代码。当我运行代码时,出现“缺口”仅在每3个*运动单位中发生变化。因此,当你向上滚动,你实际上得到3个倒滚动,每向上滚动和滑动,慢慢地向0

移动作为一个快速解决我只是做:

if (notches < 0) { 
     System.out.println("Mouse wheel moved UP " + -notches + " notch(es)"); 
     slider.setValue(slider.getValue() + 1); 
    } else 
    if (notches > 0) { 
     System.out.println("Mouse wheel moved DOWN " + notches + " notch(es)"); 
     slider.setValue(slider.getValue() - 1); 
    } 

下面是JSlider的移动代码演示鼠标滚轮旋转。我希望这会帮助你更有效地处理JSlider的鼠标滚轮旋转。

import javax.swing.*; 
import java.awt.event.*; 
public class JSliderDemo extends JFrame implements MouseWheelListener 
{ 
    JSlider degreesSlider; 
    public void prepareAndShowGUI() 
    { 
     degreesSlider = new JSlider(0,100); 
     degreesSlider.setMajorTickSpacing(2); 
     degreesSlider.setMinorTickSpacing(1); 
     degreesSlider.setPaintLabels(true); 
     degreesSlider.setPaintTicks(true); 
     degreesSlider.setPaintTrack(true); 
     degreesSlider.addMouseWheelListener(this); 
     getContentPane().add(degreesSlider); 
     setSize(1000,100); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 
    @Override 
    public void mouseWheelMoved(MouseWheelEvent evt) 
    { 
     if (evt.getWheelRotation() < 0)//mouse wheel was rotated up/away from the user 
     { 
      int iNewValue = degreesSlider.getValue() - degreesSlider.getMinorTickSpacing() ; 
      if (iNewValue >= degreesSlider.getMinimum()) 
      { 
       degreesSlider.setValue(iNewValue); 
      } 
      else 
      { 
       degreesSlider.setValue(0); 
      } 
     } 
     else 
     { 
      int iNewValue = degreesSlider.getValue() + degreesSlider.getMinorTickSpacing() ; 
      if (iNewValue <= degreesSlider.getMaximum()) 
      { 
       degreesSlider.setValue(iNewValue); 
      } 
      else 
      { 
       degreesSlider.setValue(degreesSlider.getMaximum()); 
      } 
     } 
    } 
    public static void main(String[] st) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       JSliderDemo jsd = new JSliderDemo(); 
       jsd.prepareAndShowGUI(); 
      } 
     }); 
    } 
}