Duvida JTable + ArrayList

4 respostas
thiagosil
Olá, Tenho o seguinte JTable
public class SimpleTableModel extends AbstractTableModel{


	private static final long serialVersionUID = 1L;
	private ArrayList<Paciente> pacientes;
	private String[] columns = new String[]{"Nome","Cidade","Última Consulta"};
	private DateFormat data;

	
	public SimpleTableModel(ArrayList<Paciente> pacientes){
		this.pacientes = pacientes;
	}

	public int getRowCount(){
		return this.pacientes.size();
	}
	public int getColumnCount(){
		return 3;
	}
	
	public Object getValueAt(int row, int column){
		Paciente p = this.pacientes.get(row);
		int x = p.getConsultas().size();  
		data = DateFormat.getDateInstance();
		switch(column){
		case 0: return p.getNome();
		case 1: return p.getCidade();
		case 2: if (x==0)
			return "";
		else
			return data.format(p.getConsultas().get(x-1).getDataConsulta());

		}
		return null;
	}
	public String getColumnName(int index){
		return columns[index];
	}
}
e quero de implementar os métodos setValueAt(),addRow e removeRow() como no artigo daqui do guj, mas não estou conseguindo sozinho, gostaria da ajuda de voces, num precisa implementar preciso pelo menos de uma luz

Obrigado

4 Respostas

ViniGodoy

Vai ficar mais ou menos assim (esse exemplo permite edição das colunas 0 e 1 apenas):

public void setValueAt(Object aValue, int row, int column) { Paciente p = this.pacientes.get(row); switch (column) { case 0: p.setNome((String)aValue); //Nesse específico caso poderia fazer aValue.toString(); break; case 1: p.setCidade((String)aValue); break; } }

Não se esqueça de sobrescrever também o método isCellEditable para indicar quais colunas serão editáveis:

public boolean isCellEditable(int row, int column) {
    return column == 0 || column == 1;
}

Uma boa idéia é criar as seguintes constantes e substituir em todos os lugares que os respectivos índices são usados no seu TableModel:

public static final int COL_NOME = 0; public static final int COL_CIDADE = 1; public static final int COL_ULTIMA_CONSULTA = 2;

thiagosil

vlw vinicius, vou tentar aqui

outra pergunta, o método isCellEditable permite que o usuario possa mudar o valor na tabela?

Ironlynx

Javadoc Wrote:
Returns true if the cell at rowIndex and columnIndex is editable. Otherwise, setValueAt on the cell will not change the value of that cell.

Teste o exemplo do ViniGodoy, que ele fala por si.No isCellEditable vc DIZ que as colunas SÃO editáveis ou não.No setValueAt, vc executa a mudança.

thiagosil

Como faço para, ao alterar completamente o arraylist que eu passo para a tabela, ela possa se “atualizar” ?

Criado 10 de janeiro de 2007
Ultima resposta 15 de jan. de 2007
Respostas 4
Participantes 3