Сделайте пользовательский JTableModel для прослушивания изменений в ArrayList - PullRequest
0 голосов
/ 02 мая 2018

Я получил список клиентов. У каждого Клиента есть Список Счетов, и у каждого Счета есть Список транзакций.

Недавно я реализовал функцию импорта / экспорта в моей программе, используя ObjectOutputStream / ObjectInputStream. Это работает и сохраняет все и загружается правильно.

Моя проблема заключается в том, что JTable не обновляется автоматически после изменения ArrayList (я создал пользовательский JTableModel, который в настоящее время устанавливает только ячейки как недоступные для редактирования. Есть ли прослушиватель, который соответствует моим потребностям? Мой CustomJTableModel расширяется DefaultTableModel.

Я получил триггер для загрузки / сохранения в пользовательском классе MainMenu, который содержит JMenuBar, и он не знает напрямую о TableModel или JTable (в противном случае я мог бы сделать «дешевый» способ и просто добавить его снова).

Существуют такие методы, как fireTableDataChanged, но они прослушивают только сам JTable.

Не уверен, нужно ли мне публиковать какой-либо код, подумал, что это может быть простая проблема, и что там есть подходящий слушатель.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Моя проблема в том, что JTable не обновляется автоматически после изменения ArrayList

Ну, вы не должны вносить изменения в ArrayList.

ArrayList должен использоваться в качестве структуры данных для вашей TableModel. Затем, если вы хотите внести изменения в ArrayList (т.е. добавить / удалить строки), это следует сделать с помощью TableModel.

См. Модель таблицы строк для пошагового примера создания пользовательской модели с использованием этого подхода.

Теперь, с другой стороны, если ваша проблема заключается в том, что свойство объекта, хранящегося в ArrayList, изменяется, тогда да, вам нужно использовать шаблон Observer.

0 голосов
/ 02 мая 2018

Моя рекомендация для вашей проблемы заключается в том, чтобы реализовать (интерфейс Java-наблюдателя) в вашем классе JTable и реализовать (Java-наблюдаемый интерфейс) в вашем классе, который использует и изменяет ArrayList. Таким образом, каждый раз, когда происходит изменение в вашем массиве arrayList, будет вызываться метод update и, как следствие, будет обновляться JTable.

Вот учебник, в котором подробно описаны мои объяснения

public class JTable implements Observer
{

// this is the method that will be invoked everytime a change has occured.
 public void update(Observable obs, Object obj)
   {
      // To implements as required
   }

}

public class Store implements Observable
{
   ArrayList<Customers> listOfCustomers;

 public void setValue(Customer n)
   {
      this.listOfCustomers.Add(n);
      setChanged();
      notifyObservers(); // this will notify your JTable
   }
}

Это только начало того, как внедрить систему.

...