2015-05-08 3 views
1

Я просто хотел увидеть, какой элемент выбирается, и изменить другие метки и текс-поля на фрейме в соответствии с индексом. Мой код выглядит следующим образом:ListSelectionListener неверный индекс

list = new JList(listModel); 
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    list.setLayoutOrientation(JList.VERTICAL); 

    list.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      System.out.println(e.getLastIndex()); 
     } 
    }); 

Когда я нажал первый выходной элемент: 0 0 После нажатия второго элемента: 1 1 После этого я попытался щелкнуть первый элемент снова, но на этот раз выход снова 1 1. Когда я попытался с 25 элементами, выбирая последний элемент, и после этого нажмите первый элемент и выведите 23 23. Это о проблеме события или о моем коде?

ответ

3

Поведение, которое вы получаете, является стандартным, если вы хотите иметь другое, создайте свой собственный SelectionListener, который также рассмотрит getValueIsAdjusting().

class SharedListSelectionHandler implements ListSelectionListener { 
    public void valueChanged(ListSelectionEvent e) { 
     ListSelectionModel lsm = (ListSelectionModel)e.getSource(); 

     int firstIndex = e.getFirstIndex(); 
     int lastIndex = e.getLastIndex(); 
     boolean isAdjusting = e.getValueIsAdjusting(); 
     output.append("Event for indexes " 
         + firstIndex + " - " + lastIndex 
         + "; isAdjusting is " + isAdjusting 
         + "; selected indexes:"); 

     if (lsm.isSelectionEmpty()) { 
      output.append(" <none>"); 
     } else { 
      // Find out which indexes are selected. 
      int minIndex = lsm.getMinSelectionIndex(); 
      int maxIndex = lsm.getMaxSelectionIndex(); 
      for (int i = minIndex; i <= maxIndex; i++) { 
       if (lsm.isSelectedIndex(i)) { 
        output.append(" " + i); 
       } 
      } 
     } 
     output.append(newline); 
    } 
} 

Найти here explanation of this example.

+0

У меня возникла ошибка при отправке события события. Исключение в нити "АВТ-EventQueue-0" java.lang.ClassCastException: javax.swing.JList не может быть приведен к javax.swing.ListSelectionModel ListSelectionModel LSM = (ListSelectionModel) e.getSource(); – codebender

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