2013-02-09 186 views
2

我有這段代碼,但沒有任何反應。我不知道爲什麼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

回答

2

嘗試在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); 
    } 
2

下面是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(); 
      } 
     }); 
    } 
}