2016-08-18 8 views
0

Пожалуйста, смотрите мой код ниже. То, что я хочу, во время моего события колеса мыши, прокручивается до списка, установленного в моей spinnermodel, но неспособного это сделать. можете ли вы помочь мне, что такое соответствующий код на mousewheel случае?MouseWheelListener в JSpinner JAVA

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); 

Это ошибка я получил, когда я исполняю свою программу

Исключение в потоке «АВТ-EventQueue-0» java.lang.ClassCastException: java.lang.String не может быть приведен к java.lang .Integer.

Я все еще новичок в программировании на Java, и у меня есть чему поучиться .. Спасибо за тех, кто поможет.

ответ

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); 
    } 
}); 
+0

Working .. спасибо :) – Rhye

0

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()); 
     } 
    } 
}); 
+0

спасибо, что она работает .. – Rhye

 Смежные вопросы

  • Нет связанных вопросов^_^