2010-11-14 66 views
0

我想用我的鼠標滾輪來遞增和遞減JSpinner。這可能嗎?在Java中使用帶有JSpinner的鼠標滾輪

+0

我發現了一個黑客(見我的答案和下面的org.life.java的答案)。但是有沒有一個簡單的開關,設置或屬性可以讓微調者不用編寫所有代碼就可以實現這種行爲? – Jason 2010-11-14 18:52:32

+0

在詢問之前,您是否嘗試了** **? – 2010-11-14 18:54:59

回答

4
import javax.swing.*; 
import java.awt.event.*; 
public class TestSpinner extends JFrame implements 
MouseWheelListener 
{ 
    public TestSpinner() 
    { 
    setSize(100, 50); 
    spinner = new JSpinner(); 
    spinner.addMouseWheelListener(this); 
    getContentPane().add(spinner, "Center"); 
    } 
    public void mouseWheelMoved(MouseWheelEvent e) 
    { 
    spinner.setValue(new Integer(
((Integer)spinner.getValue()).intValue() - 
e.getWheelRotation())); 
    } 
    public static void main(String [] args) 
    { 
    TestSpinner t = new TestSpinner(); 
    t.setVisible(true); 
    } 
    private JSpinner spinner; 
} 

出處:http://www.devx.com/tips/Tip/14880

+0

這是我最終使用的解決方案。但我在自己的答案中給出了一個更清晰的答案。 – Jason 2010-11-14 18:51:36

0
spinner.addMouseWheelListener(new MouseWheelListener() { 
    public void mouseWheelMoved(MouseWheelEvent mwe) { 
     if (mwe.getScrollType() != MouseWheelEvent.WHEEL_UNIT_SCROLL) { 
      return; 
     } 
     double value = (Double)spinner.getValue(); 
     value -= mwe.getUnitsToScroll(); 
     spinner.setValue(value); 
    } 
}); 

這劈爲我工作。

+1

注意,即使您的模型(例如SpinnerNumberModel)支持該值,也不會考慮最小和最大允許值。我在調用setValue之前手動添加了檢查。 – 2012-05-07 21:57:20