Minha JTable não aparece

Puts, fiz alguma coisa que fez a minha JTable sumir (não aparece quando executo o programa) e não tô coseguindo achar o erro. Alguém sabe o que é?

Código:

[code]
public class TelaDadosProduto extends javax.swing.JInternalFrame {

MeuModelo modelo;
Produto produtO;

public TelaDadosProduto() throws ClasseDeExcecao {
    initComponents();

    JPanel pProd = new JPanel(new BorderLayout());
    JTable tabelaProduto = inicializaTabela();
    pProd.add(new JScrollPane(tabelaProduto), BorderLayout.CENTER);
    setContentPane(pProd);
    pack();
}

private JTable inicializaTabela() {
    JTable tabelaProduto = new JTable(modelo);
    return tabelaProduto;
}

public void setPosicao() {
    Dimension d = this.getDesktopPane().getSize();
    this.setLocation(15 + (d.width - this.getSize().width) / 5, 15 + (d.height
            - this.getSize().height) / 5);
}

public void showMensagem(String mensagem, boolean isErro) {
    if (isErro) {
        JOptionPane.showMessageDialog(null,
                mensagem,
                "Mensagem de erro",
                JOptionPane.ERROR_MESSAGE);
    } else {
        JOptionPane.showMessageDialog(null,
                mensagem,
                "Mensagem de sucesso",
                JOptionPane.INFORMATION_MESSAGE);
    }
}

}[/code]

Modelo da tabela

[code]public class MeuModelo extends AbstractTableModel {

private ArrayList lista = new ArrayList();
private String[] colunas = {"Nome", "Quantidade",
    "Unidade de venda", "ValorCompra", "ValorVenda", "Data da compra"};

public MeuModelo(List lista1) {
    lista.addAll(lista1);
}

public MeuModelo() {
}

public Produto getProdutoAt(int row) {
    return (Produto) lista.get(row);
}

public Produto removeProdutoAt(int row) {
    return (Produto) lista.remove(row);
}

public void addProduto(Produto w) {
    lista.add(w);
    fireTableDataChanged();
}

public void addProdutoList(List l) {
    lista.addAll(l);
    fireTableDataChanged();
}

public int getRowCount() {
    return lista.size();
}

@Override
public String getColumnName(int i) {
    return colunas[i];
}

public int getColumnCount() {
    return colunas.length;
}

public Object getValueAt(int linha, int coluna) {
    Produto produto = (Produto) lista.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) {
    switch (coluna) {
        case 0: //nome
            return true;
        case 1: //quantidade
            return true;
        case 2: //unidade de venda
            return true;
        case 3: //valor unitário
            return true;
        case 4: //valor total
            return true;
        case 5: //data da compra
            return true;
        default:
            return false;
    }
}

@Override
public Class getColumnClass(int coluna) {
    switch (coluna) {
        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) lista.get(linha);
    switch (coluna) {
        case 0: //Nome
            try {
                produto.setNome(valor.toString());
            } catch (ClasseDeExcecao ex) {
                Logger.getLogger(MeuModelo.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(MeuModelo.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(MeuModelo.class.getName()).log(Level.SEVERE, null, ex);
            }
            break;
    }
}

}[/code]

Tenta colocar um tabela.updateUI(); dpois de criar a tabela.

Ou modelo.fireTableDataChanged();

[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

Vc instanciou um objeto MeuModelo?

MeuModelo model = new MeuModelo(); tabela.setModel(modelo); model.fireTableDatChanged();

[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

Você não deve chamar updateUI() em componente nenhum do Swing, em hipótese nenhuma. Se está fazendo isso, seu código está errado.

eu usei o modelo abaixo:

   MeuModelo model = new MeuModelo();  
    tabela.setModel(modelo);  
    model.fireTableDatChanged(); 

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().

ViniGodoy, a tabela aparece vazia, sem nenhuma linha em branco, só que eu queria que aparecesse por padrão 10 linhas.

ViniGodoy, alterando para o modo que você falou, ficaria assim correto?

package sistemaproduto.interfacegrafica;

public class TelaDadosProduto extends javax.swing.JInternalFrame {

    Produto produtO;
    JTable tabelaProduto = new JTable();
    JButton bCadastrar = new JButton();

    public TelaDadosProduto() throws ClasseDeExcecao {
        JPanel pProd = new JPanel(new BorderLayout());
        tabelaProduto = inicializaTabela();
        pProd.add(new JScrollPane(tabelaProduto), BorderLayout.CENTER);
        setContentPane(pProd);
        pack();
    }

    private JTable inicializaTabela() {

        class MeuModelo extends AbstractTableModel {

    private ArrayList lista = new ArrayList();
    private String[] colunas = {"Nome", "Quant",
        "Unid venda", "Valor de Compra", "Valor de Venda", "Data da compra"};

    public MeuModelo(List listA) {
        lista.addAll(listA);
    }

    public MeuModelo() {
    }

    public void insereLinha(){
    }

    public Produto getProdutoAt(int row) {
        return (Produto) lista.get(row);
    }

    public Produto removeProdutoAt(int row) {
        return (Produto) lista.remove(row);
    }

    public void addProduto(Produto prod) {
        lista.add(prod);
        fireTableDataChanged();
    }

    public void addProdutoList(List listA) {
        lista.addAll(listA);
        fireTableDataChanged();
    }

    public int getRowCount() {
        return lista.size();
    }

    @Override
    public String getColumnName(int i) {
        return colunas[i];
    }

    public int getColumnCount() {
        return colunas.length;
    }

    public Object getValueAt(int linha, int coluna) {
        Produto produto = (Produto) lista.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) {
        switch (coluna) {
            case 0: //nome
                return true;
            case 1: //quantidade
                return true;
            case 2: //unidade de venda
                return true;
            case 3: //valor unitário
                return true;
            case 4: //valor total
                return true;
            case 5: //data da compra
                return true;
            default:
                return false;
        }
    }

    @Override
    public Class getColumnClass(int coluna) {
        switch (coluna) {
            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) lista.get(linha);
        switch (coluna) {
            case 0: //Nome
                try {
                    produto.setNome(valor.toString());
                } catch (ClasseDeExcecao ex) {
                    Logger.getLogger(MeuModelo.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(MeuModelo.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(MeuModelo.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
        }
    }
}
        MeuModelo modelo = new MeuModelo();
        JTable tabelaProdut = new JTable(modelo);

        return tabelaProdut;
    }

    public MeuModeloTab getModelo() {
        return (MeuModeloTab) tabelaProduto.getModel();
    }

    public void setPosicao() {
        Dimension d = this.getDesktopPane().getSize();
        this.setLocation(115 + (d.width - this.getSize().width) / 5, 115 + (d.height
                - this.getSize().height) / 5);
    }

    public void showMensagem(String mensagem, boolean isErro) {
        if (isErro) {
            JOptionPane.showMessageDialog(null,
                    mensagem,
                    "Mensagem de erro",
                    JOptionPane.ERROR_MESSAGE);
        } else {
            JOptionPane.showMessageDialog(null,
                    mensagem,
                    "Mensagem de sucesso",
                    JOptionPane.INFORMATION_MESSAGE);
        }
    }    
}

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.

Aff… mesmo alterando o código e tirando as validações da erro. Fica dando NullPointException

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;
    }
}

}[/code]

na outra classe, chamo o modelo assim:

[code]

List<Produto> produto;
public TelaDadosProduto() throws ClasseDeExcecao {
JPanel pProd = new JPanel(new BorderLayout());
tabelaProduto.setModel(new ModeloTabela(produto));
pProd.add(new JScrollPane(tabelaProduto), BorderLayout.CENTER);
setContentPane(pProd);
pack();
}[/code]

Em que linha dá o NullPointer?

nessa aqui:

[code]
//Contrutor que recebe a lista de produtos;
public ModeloTabela(List valores) {
this.valores = new ArrayList(valores);// aqui dá o erro

}[/code]

Estranho. E que linha chama essa função?

esse é o construtor da minha classe

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