MouseWheelListener в JSpinner JAVA
Пожалуйста, смотрите мой код ниже. Что я хочу, так это то, что во время события с колесом мыши он прокручивает список, установленный в моей спиннер-модели, но не может этого сделать. Можете ли вы помочь мне, какой код подходит для события mousewheel?
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, и у меня есть чему поучиться.. Спасибо тем, кто поможет.
2 ответа
Вы получаете 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);
}
});
setValue()
это не индекс SpinnerListModel
, а точнее фактическое значение индекса в SpinnerListModel
, Означающий, что getValue()
вернет либо "P5", "D1", "D2", "D3"... Вместо того, где они находятся внутри массива.
Я сделал рабочий пример, который использует 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());
}
}
});