O ideal mesmo é você parar de lutar com seu JTable e entender como ele funciona.
Primeiro de tudo: Não use o DefaultTableModel. A tabela funciona da seguinte forma:
- Existe a classe JTable, que coordena o desenho dos dados;
- Existe a classe TableCellRenderer, que desenha uma célula em si;
- Existe a classe TableModel, que é quem diz a tabela que dados devem ser desenhados;
O java inclui uma implementação padrão de TableModel, como exemplo. Já vou adiantando que ela é péssima, e constitui por si só uma péssima prática de programação. Por vários motivos:
a) Ela mistura lógica de view com a de negócio;
b) Ela dobra a quantidade de memória necessária para exibir o JTable;
c) Ela torna o código inseguro, cheio de casts, e difícil de ler;
d) É mais difícil usa-lo do que fazer seu próprio TableModel.
Fazer um TableModel é simples. Comece criando uma classe filha de AbstractTableModel. Entenda que cada método do AbstractTableModel será chamado pelo próprio JTable, quando ela estiver perguntando o que será desenhado. Pegue por exemplo o método isCellEditable, citado pelo colega. A tabela chama aquele método perguntando: “Ei TableModel, a célula da coluna column e da linha line, é editável?” E seu model retorna para ela o valor “sim” ou “não”, em resposta a pergunta.
Nesse tópico, existe uma implementação de um TableModel simples, para livros:
http://www.guj.com.br/posts/list/132698.java#714736
Dê uma lida. Note que aprender a usar o model também responde a pergunta do seu outro tópico. Uma vez que você vai separar o JTable dos dados deles em si, fica fácil reproveitar esses dados entre vários JTables de sua aplicação. 