I think
you should do it like the DefaultTableModel does. That is you should be able to build the model mutliple ways:
a) Pass in the ArrayList as part of the constructor
b) Reset the model by adding to method to accept the ArrayList
c) Dynamically change the model with add/remove methods.
The model should not be responsible for reading data from a file because then it becomes a single purpose model.
For a generic model you check out my
RowTableModel. You can then extend it to provide the appropriate constructor and implement your getValueAt() and setValueAt() methods (or you could just use the BeanTableModel which can also be found at the above link)