如何用鼠标滚轮移动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);
}
}
});
答
尝试在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();
}
});
}
}
是您的侦听器执行的代码? – 2013-02-09 22:13:17
是的。 '跑步: 鼠标滚轮向上移动1档(es)' – 2013-02-09 22:13:51
您为滑块的最小/最大值设置了什么?也许1是你没有注意到什么差异? – 2013-02-09 22:14:28