请参阅下面的代码..我想要的是在我的鼠标滚轮事件期间它将滚动到我的spinnermodel中的列表集但无法执行此操作。你能帮我找一下鼠标轮事件的适当代码吗?
JSpinner lines = new JSpinner();
lines.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent e) {
lines.setValue(new Integer((Integer)lines.getValue()).intValue() - e.getWheelRotation());
}
});
lines.setFont(new Font("Tahoma", Font.BOLD, 12));
lines.setModel(new SpinnerListModel(new String[] {"P5", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", }));
lines.setBounds(63, 11, 49, 35);
frmHistoryRequest.getContentPane().add(lines);
这是我执行程序时遇到的错误
线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Integer。
我仍然是Java编程的新手,我还有很多需要学习的东西..感谢那些愿意提供帮助的人。
答案 0 :(得分:0)
您正在获取ClassCastException,因为当您的模型仅包含字符串时,您的代码正在尝试将模型的当前值设置为Integer。
以下代码段应使用模型中的下一个和上一个值正确设置模型的当前值。
lines.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent e) {
int positiveWheelRotation = Math.abs(e.getWheelRotation());
Object value = null;
for(int i=0;i<positiveWheelRotation;i++) {
if(e.getWheelRotation() > 0)
value = lines.getNextValue();
else if(e.getWheelRotation() < 0)
value = lines.getPreviousValue();
}
if(value != null)
lines.setValue(value);
}
});
答案 1 :(得分:0)
setValue()
不是SpinnerListModel
的索引,而是SpinnerListModel
中索引的实际值。意味着getValue()
将返回&#34; P5&#34;,&#34; D1&#34;,&#34; D2&#34;,&#34; D3&#34; ...而不是它们在阵列中的位置。
我制作了一个使用getPreviousValue()
和getNextValue()
的工作示例:
JSpinner lines = new JSpinner();
lines.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent e) {
int direction = e.getWheelRotation();
if (direction > 0 && lines.getPreviousValue() != null){ // down
lines.setValue(lines.getPreviousValue());
} else if (direction < 0 && lines.getNextValue() != null){ // up
lines.setValue(lines.getNextValue());
}
}
});