Problema fireTableRowsInserted

4 respostas
R

ola pessoal, meu problema é o seeguinte tenho um modelo que extende abstractTableModel:

import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class modeloRegistroLocacao extends AbstractTableModel
{
	private static final long serialVersionUID = 1L;
	Vector modelVetorFichas;
	public modeloRegistroLocacao(Vector listaFichas)
	{
		modelVetorFichas=listaFichas;
	}
	public int getRowCount()
	{
		return modelVetorFichas.size();
	}
	public int getColumnCount()
	{
		return 6;
	}
	public Object getValueAt(int r,int c)
	{
		RegistroLocacao FichaAtual=(RegistroLocacao)modelVetorFichas.get(r);
		if(c==0)
			return FichaAtual.getCod_livro_locado();
		if(c==1)
			return FichaAtual.getLivro_locado();
		if(c==2)
			return FichaAtual.getAutor_livro_locado();
		//if(c==3)
			//return FichaAtual.getCod_usuario();
		//if(c==2)
			//return FichaAtual.getNome_usuario();
		//if(c==5)
			//return FichaAtual.getEndereco_usuario();
		//if(c==6)
			//return FichaAtual.getEndereco_numero_usuario();
		//if(c==7)
			//return FichaAtual.getTel_residencial_usuario();
		//if(c==8)
			//return FichaAtual.getTel_celular_usuario();
		if(c==3)
			return FichaAtual.getData_locacao();
		if(c==4)
			return FichaAtual.getData_program_devolucao();
		if(c==5)
			return FichaAtual.getData_efetiva_devolucao();
		
		return FichaAtual;
	}
	public void insertRow(Object[] data)
	{
		modelVetorFichas.add(data);
		//fireTableRowsInserted(0,modelVetorFichas.size());
	}
	public void removeRow(int row)
	{
		modelVetorFichas.remove(row);
		fireTableRowsDeleted(row,row);
	}
}

depois dentro de um form tenho um botao que chama o seguinte código para inserir uma linha. De fato ele insere na tabela, mas nao consigo atualizar visualmente.

try {
								inserelocacao.efetuaLocacao(insereEmprestimo);
								Object dados[]={codLivroLocado,livroLocado,autorLivroLocado,DataEmprestimo,DataDevolucao,codUsuario,nomeUsuario};
								
//tento modificar a tabela de livros com usuarios para exibir
//o novo livro adicionado a ela
								
modeloRegistroLocacao mostraNovoLivro=(modeloRegistroLocacao)jTablelivroscomusuario.getModel();
int numCol=(mostraNovoLivro.getRowCount());
System.out.println("a tabela tem "+numCol+" linhas");
mostraNovoLivro.insertRow(dados);
								jTablelivroscomusuario.getTableHeader().resizeAndRepaint();
								
								//JOptionPane.showMessageDialog(null,"Empréstimo Efetuado com Sucesso");
														} catch (Exception insercao) {
		insercao.printStackTrace();

}

o Problema é que quando clico no botao o java da erro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object;
	at modeloRegistroLocacao.getValueAt(modeloRegistroLocacao.java:22)

esse erro corresponde a esta linha da primeira listagem:

RegistroLocacao FichaAtual=(RegistroLocacao)modelVetorFichas.get(r);

Eu sei que o erro acontece quando tento usar

fireTableRowsInserted(0, modelVetorFichas.size());

pra atualizar o modelo da tabela.

alguem sabe o que pode estar acontecendo? T+

4 Respostas

dudaskank

Fiz uns testes aqui e vi onde estão alguns problemas.

Para que funcione, você no seu insertRow deve receber um objeto do mesmo tipo do que está no vetor, ou seja, RegistroLocacao. Como está aí, você está adicionando um vetor de objetos na última linha. E também você deve descomentar sua linha que diz que houve as mudanças nas linhas, mais ou menos assim:

public void insertRow(RegistroLocacao data) { vetor.add(data); fireTableRowsInserted(getRowCount(), getRowCount()); }

E claro, no botão lá você vai ter que mudar a sua chamada para este método.

flw

R

skank, entendi mais ou menos como é pra fazer, mas surgiu uma duvida de como faco pra criar um vetor do tipo RegistroLocacao,
Voce pode mandar um exemplo do que devo fazer no codigo?

T++

dudaskank

beleza

Vou colocar o método que fiz pra testar seu modelo de tabela aqui. É só adicionar no vetor instâncias do seu objeto mesmo:

protected Vector geraDados() { Vector v = new Vector(); Registro registro; for (int i = 0; i < 100; i++) { registro = new Registro(); registro.setId(i); registro.setNome("Nome " + i); v.add(registro); } return v; }

flw

R

valew cara, funcionou certinho aqui…
:smiley:

valew pela ajuda… T+

Criado 24 de julho de 2006
Ultima resposta 25 de jul. de 2006
Respostas 4
Participantes 2