Связано с ListSelectionListener

Я использовал ListSelectionListener для прослушивания выбора JTable для выполнения другой задачи, связанной с выбранным элементом в таблице. но почему следующий код выполняется дважды при одном выборе в начале и много раз после того, как эта таблица обновляется?

 public void valueChanged(ListSelectionEvent e) 
    System.out.println(tablelist.getSelectedIndex());       
 }

person svkvvenky    schedule 29.06.2012    source источник


Ответы (1)


потому что ListSelectionListener из интерфейс ListSelectionModel всегда запускает два события

int firstIndex = e.getFirstIndex();
int lastIndex = e.getLastIndex();

все в руководстве по Oracle

person mKorbel    schedule 29.06.2012
comment
+1, а также подумайте о том, чтобы прочитать значение e.getValueIsAdjusting() - person Guillaume Polet; 29.06.2012
comment
Да, он всегда запускает два события. Но мой сценарий таков: 1) я написал функцию базы данных, которая вернет модель для Jtable. 2) я вызову эту функцию, и я настраиваю свой настроенный слушатель на модель, возвращаемую function.3) Позже, когда база данных обновляется новыми строками, шаг 2 повторяется. Теперь в этом случае следующий код выполняется много раз: public void valueChanged(ListSelectionEvent e) System.out.println(tablelist.getSelectedIndex() ); } - person svkvvenky; 02.07.2012
comment
необходимо разделить на 1) базу данных --> можно сохранить только измененное значение из JTable Cell, 2) JTables View vs. TableModel (все изменения должны быть сделаны в EDT) 3) свести к минимуму влияние прослушивателей на базу данных по сравнению с JTable - person mKorbel; 02.07.2012