Свързано с 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 v.s. TableModel (всички промени трябва да бъдат направени на EDT) 3) минимизиране на въздействието на слушателите върху базата данни срещу. JTable - person mKorbel; 02.07.2012