2010-11-14 67 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