TableModel - mais uma alternativa

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!

Isso é muito similar ao que faz o ObjectTableModel do projeto Towel:

A diferença é que ele usa anotations no lugar de um Array.
Isso dá mais flexibilidade pois, além de permitir escolher quais colunas exibir, ele também deixa configurar títulos, renderers, etc.

Oi Vini.

Não conhecia esse ObjectTableModel. Achei muito interessante.

Valeu!