Отслеживание JTable, когда пользователь вносит изменения в ячейку, и только пользователь

Я работаю над своим первым приложением Java/Swing, и мне нужна помощь с JTable.

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу отслеживать, когда ПОЛЬЗОВАТЕЛЬ вносит изменения в мой JTable, а НЕ в приложение. Я сделал следующее:

//Made my table then did the following line:

table.getModel().addTableModelListener(this);

//Have a listener set up:

public void tableChanged(TableModelEvent e) {
  // TODO Auto-generated method stub
        System.out.println(e);
 }

Теперь проблема в том, что я не хочу, чтобы это срабатывало, когда моя программа вносит изменения в таблицу, например, я загружаю новую таблицу, а загруженный файл имеет 15 строк, тогда я получу 15 различных событий. Я хочу запускать только тогда, когда ПОЛЬЗОВАТЕЛЬ внес изменения в ячейку.

Любая помощь приветствуется. Заранее спасибо.


person user597608    schedule 31.01.2011    source источник
comment
Почему бы не добавить TableModelListener после заполнения таблицы?   -  person trashgod    schedule 01.02.2011
comment
Таблица может быть заполнена в любой момент новой строкой, удалением строки или пользователем, загружающим новый файл, так что это не будет решением для моего приложения.   -  person user597608    schedule 01.02.2011
comment
Поэтому либо удалите TML перед действием пользователя (которое обновляет всю таблицу) и добавьте его снова после его завершения, либо установите в коде флаг, указывающий, что происходят программные изменения.   -  person Andrew Thompson    schedule 01.02.2011
comment
Я думал о том, чтобы сделать это, Эндрю, но надеялся, что будет более чистый способ сделать это.   -  person user597608    schedule 01.02.2011


Ответы (1)


В комментарии Эндрю есть несколько наиболее распространенных способов справиться с этой ситуацией. В зависимости от того, как ваша модель построена/хранится и что именно вы хотите сделать при изменении, вы можете что-то сработать в модели при изменении или возможно в методе setValueAt.

person jzd    schedule 01.02.2011