[quote=claudneto]Tenta colocar um tabela.updateUI(); dpois de criar a tabela.
Ou modelo.fireTableDataChanged();[/quote]
claudneto, usando tabela.updateUI(); não deu nada. usando o modelo.fireTableDatChanged(); deu esse erro: Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
[quote=claudneto]Vc instanciou um objeto MeuModelo?
MeuModelo model = new MeuModelo();
tabela.setModel(modelo);
model.fireTableDatChanged();[/quote]
huuuu cara valeu… deu certim. Só mais uma coisinha, como faço para a tabela aparecer com, por exemplo, 10 linhas (em branco) sem eu precisar clicar em nada para adicionar.
alguém ai sabe como fazer para aparecer N quantidades de linhas na tabela na hora que eu executar o programa? Tentei mais da esse erro: java.lang.Object cannot be cast to sistemaproduto.modelo.dominio.Produto
Tente definir seu modelo já no método inicializaTabela. Algumas informações sobre o tamanho da tabela dependem da existência de um modelo.
Além disso, sua JTable nem sequer aparece no seu form, ou ela aparece, mas vazia?
Finalmente, não é necessário chamar o fireTableDataChanged depois do setModel. Como o modelo inteiro está mudando na JTable, ela atualizará seus dados automaticamente. O fireTableDataChanged só deve ser disparado se alteramos o conteúdo de um modelo já associado ao JTable.
Finalmente, seria bom usar os generics ali no seu model para evitar aquele monte de casts. Ao invés de um ArrayList(), crie um ArrayList().
Opa, mas aí o problema é outro. Vc quer que apareça 10 linhas? Mas o que teria nessas linhas, se a tabela não tiver conteúdo?
Pq se vc quiser 10 linhas em branco, seu model teria que retornar essas linhas em branco.
Sim ViniGodoy, é para ele retornar as 10 linhas em branco, só que num to conseguindo fazer ele retornar elas em branco pq na minha classe de Produto ele verifica se os campos são nulos ou não, daí ele me retorna um erro. E se eu retirar essa verificação de campo, a pessoa vai conseguir cadastrar alguns valores null.
pô num consegui descobrir porque está dando NullPointException.
segue o código alterado, segundo os conselhos do ViniGodoy:
[code]public class ModeloTabela extends AbstractTableModel {
private static final int col_nome = 0;
private static final int col_quantidade = 1;
private static final int col_unidadeVenda = 2;
private static final int col_valorCompra = 3;
private static final int col_valorVenda = 4;
private static final int col_dataCompra = 5;
//Produto produto = new Produto();
private List<Produto> valores;
//Contrutor que recebe a lista de produtos;
public ModeloTabela(List<Produto> valores) {
this.valores = new ArrayList<Produto>(valores);// aqui dá o erro. Só que não descobri o porque do erro
}
public int getRowCount() {
return valores.size();
}
public int getColumnCount() {
return 10;
}
@Override
public String getColumnName(int coluna) {
if (coluna == col_nome) {
return "Nome";
}
if (coluna == col_quantidade) {
return "Qtd";
}
if (coluna == col_unidadeVenda) {
return "Unid Venda";
}
if (coluna == col_valorCompra) {
return "Valor Compra";
}
if (coluna == col_valorVenda) {
return "Valor Venda";
}
if (coluna == col_dataCompra) {
return "Data da Compra";
}
return "";
}
public Object getValueAt(int linha, int coluna) {
Produto produto = (Produto) valores.get(linha);
switch (coluna) {
case 0:
return produto.getNome();
case 1:
return new BigDecimal(String.valueOf(produto.getQuantidade()));
case 2:
return produto.getUnidadeVenda();
case 3:
return new BigDecimal(String.valueOf(produto.getValorVenda()));
case 4:
return new BigDecimal(String.valueOf(produto.getValorCompra()));
case 5:
return new Date(String.valueOf(produto.getDataCompra()));
default:
return null;
}
}
@Override
public boolean isCellEditable(int linha, int coluna) {
return true;
}
@Override
public Class<?> getColumnClass(int colunaIndex) {
switch (colunaIndex) {
case 0: //Nome
return String.class;
case 1: //Quantidade
return BigDecimal.class;
case 2: //unidade de venda
return String.class;
case 3: //valor unitário
return BigDecimal.class;
case 4: //valor total
return BigDecimal.class;
case 5: //data da compra
return Date.class;
default:
return null;
}
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
Produto produto = (Produto) valores.get(linha);
switch (coluna) {
case 0: //Nome
try {
//Nome
produto.setNome(valor.toString());
} catch (ClasseDeExcecao ex) {
Logger.getLogger(ModeloTabela.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 1: //quantidade
BigDecimal quantidade = new BigDecimal(valor.toString());
produto.setQuantidade(quantidade);
break;
case 2: //unidade de venda
try {
produto.setUnidadeVenda(valor.toString());
} catch (ClasseDeExcecao ex) {
Logger.getLogger(ModeloTabela.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 3: //valor unitário
BigDecimal valorUnit = new BigDecimal(valor.toString());
produto.setValorVenda(valorUnit);
break;
case 4: //valor total
BigDecimal valortotal = new BigDecimal(valor.toString());
produto.setValorCompra(valortotal);
break;
case 5: //valor unitário
Date data = new Date(valor.toString());
try {
produto.setDataCompra(data);
} catch (ClasseDeExcecao ex) {
Logger.getLogger(ModeloTabela.class.getName()).log(Level.SEVERE, null, ex);
}
break;
}
}
só para tentar ajudar, quando eu debugo ele dá erro na linha que eu informei e mostra a seguinte mensagem onde você vê os valores das variáveis: “Informação de variável não disponível, código-fonte compilado sem a opção -g”, e na saída mostra java.lang.NullPoniterException.
Nâo sei se ajuda, mas quando debugo e da o erro ele também pula para a classe EventDispachThread