Oi Pessoal.
Eu gostaria de deixar minha contribuição para o assunto. Desenvolvi uma forma que, ao meu ver, é muito simples para trabalhar com um JTable e TableModel.
É uma classe filha de AbstractTableModel que simplifica a tarefa de manipular dados em um JTable. Veja como ficaria um exemplo:
// Definição das colunas. Defino o nome da coluna e qual atributo ela
// representa na classe modelo:
Map<String,String> colunas = new LinkedHashMap<String,String>();
colunas.put("Nome Paciente", "Nome");
colunas.put("Ativo?","Ativo");
// Definição da "fonte" de dados.
Collection<Paciente> pacientes = new ArrayList<Paciente>();
pacientes.add(new Paciente("João das Couves", true));
pacientes.add(new Paciente("Zé mané",false));
// Criando o JTable.
EVATableModel<Paciente> evaTableModel = new EVATableModel<Paciente>(Paciente.class,colunas,pacientes);
JTable table = new JTable(evaTableModel);
// Criando o scroll do JTable.
JScrollPane scroll = new JScrollPane(table);
scroll.setPreferredSize(new Dimension(200,200));
// Finalmente, o Form.
JFrame form = new JFrame();
form.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
form.getContentPane().add(scroll);
form.pack();
form.setVisible(true);
// E agora insiro um novo paciente, via TableModel.
Paciente novoPaciente = new Paciente("Novo",true);
evaTableModel.inserirRegistro(novoPaciente);
Ao rodar esse exemplo, o JTable será renderizado na tela. O checkbox para o campo booleano será colocado automaticamente.
Em anexo, os fontes da classe e do exemplo acima.
Espero que ajude.
Fiquem à vontade para melhorar o código.
Paz!