这让我很困惑:
我有一个小型应用程序,它使用 JSpinner 来获取数值。我向其中添加了一个 MouseAdapter
,根据生成的事件的 getScrollAmount()
和 getWheelRotation()
设置值。
只要应用程序在 Linux(Debian Wheezy、Oracle JDK 1.6.0_32)上运行,一切都工作得很好。也就是说,在 JSpinner 获得焦点时滚动鼠标滚轮效果很好(使用 GTK LookAndFeel)。
在 Microsoft Windows 上测试该软件会出现不同的行为:
JSpinner
不会对鼠标滚轮移动使用react。 LookAndFeel
在这里似乎不是问题,因为我已经在 Linux 和 Windows 上尝试过 MetalLookAndFeel
。
关于如何让 JSpinner 对两个操作系统上的 MouseWheelEvent
使用react,有什么建议吗?
谢谢。
最佳答案
嗯,我不确定可能出了什么问题,但这里是在 Windows 7 上设计的代码,它运行良好,所以也许可以在您的系统上尝试一下,看看代码有什么不同:
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
/**
*
* @author David
*/
public class JSpinnerMouse extends JFrame {
private JSpinner jspinner;
public JSpinnerMouse() {
createAndShowUI();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
// If Nimbus is not available, you can set the GUI to another look and feel.
}
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JSpinnerMouse jSpinnerMouse = new JSpinnerMouse();
}
});
}
private void createAndShowUI() {
setTitle("JSpinner using mouse wheel");
setSize(300, 300);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
addComponentsToContentPane(getContentPane());
addListeners();
setVisible(true);
}
private void addComponentsToContentPane(Container contentPane) {
jspinner = new JSpinner();
contentPane.add(jspinner);
}
private void addListeners() {
this.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent mwe) {
if (MouseWheelEvent.WHEEL_UNIT_SCROLL == mwe.getScrollType()) {
int value = (int) jspinner.getValue();
if (mwe.getWheelRotation() == -1) {//up
jspinner.setValue(value + 1);
} else {//down
jspinner.setValue(value - 1);
}
}
}
});
}
}
还要提一下,我在 MouseWheelEvent 中找不到 getDirection() 方法,就像您所说的那样,所以我使用了 getUnitsToScroll() ,它将根据方向返回正值或负值。也许这就是造成麻烦的原因。您在 MouseWheelEvent 类中哪里找到 getDirection() 方法?
关于java - JSpinner 对 Windows 上的 MouseWheelEvent 没有反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059273/