List Selection Listener valuechanged срабатывает более 2 раз

Я добавляю listselectionlistener, когда я нажимаю на вкладку

table1 = new ListSelectionListener()
{
  public void valueChanged(ListSelectionEvent e)
  {
    action(e);
  }
};
ListSelectionModel SM = table1A.getSelectionModel();
SM.addListSelectionListener(table1);
SM = table1B.getSelectionModel();
SM.addListSelectionListener(table1);

Когда я нажимал на строку таблицы, функция action(e) срабатывала много раз.

private void action(ListSelectionEvent e)
{
  ListSelectionModel lsm = (ListSelectionModel) e.getSource();

  if (lsm.getValueIsAdjusting())
  {
   // nothing
  }
  else
  {
   // my action here
  }
}

Действие (e) должно запускаться дважды, один раз при щелчке мышью, один раз при отпускании мыши. Я использовал getValueIsAdjusting() для противодействия щелчку мыши, поэтому мое действие должно выполняться один раз. Но мои действия выполняются много раз. я вижу это, потому что мне нужно поместить занятый диалог в свое действие.


person user2545866    schedule 30.08.2014    source источник
comment
Я думаю, вы думаете о MouseListener. ListSelectionListeners прислушиваются к изменениям того, что выбрано, а не к щелчкам мыши и отпусканиям. Это могут быть очень разные вещи.   -  person gla3dr    schedule 30.08.2014
comment
Что ж, ListSelectionModel SM = table1A.getSelectionModel(); SM.addListSelectionListener(table1); SM = table1B.getSelectionModel(); SM.addListSelectionListener(table1); кажется, слушатель добавляется дважды!   -  person Andrew Thompson    schedule 30.08.2014
comment
Чтобы быстрее получить помощь, опубликуйте MCVE (минимальный, полный, проверяемый пример).   -  person Andrew Thompson    schedule 30.08.2014


Ответы (1)


Вам нужно установить «значение настраивается» на true.

 SM.setValueIsAdjusting(true);

Пожалуйста, переименуйте SM в sM, потому что атрибут java должен начинаться с маленькой буквы. (Соглашение Java)

person Toufic    schedule 01.09.2014
comment
Где мне нужно установить это? - person user2545866; 01.09.2014
comment
Под ListSelectionModel SM = table1A.getSelectionModel(); - person Toufic; 01.09.2014