Pessoal duvida jtable

Gostaria de saber como eu insiro dados em uma jtable.

Eu uso uma table model para controlar jtable
DAO responsavel pela conexão com o banco

como eu consigo fazer os dois metodos se comunicarem de forma que os dados do banco são mostrados da jtable

Bom abaixo segui o que eu fiz mas nao deu certo

 List<Produto> lista = daoProduto.buscarTodos();
                ProdutoTableModel model = new ProdutoTableModel(lista);//aqui fica grifado a lista ou seja está dando erro.
                tblBanco.setModel(model);

Meu codigo da Table Model: Produto

public class Produto {

    private String despesa;
    private String estabelecimento;
    private String datadespesa;
    private String valordespesa;
    private String formapagamento;
    private String datacheque;
    private String numerocheque;

    public Produto() {
    }

    public Produto(String despesa,String estabelecimento,String datadespesa,String valordespesa,String formapagamento,String datacheque,String numerocheque) {
        this.despesa = despesa;
        this.estabelecimento = estabelecimento;
        this.datadespesa = datadespesa;
        this.valordespesa = valordespesa;
        this.formapagamento = formapagamento;
        this.datacheque = datacheque;
        this.numerocheque = numerocheque;
    }

    //Gets

    public String getDespesa() {
        return despesa;

}
     public String getEstabelecimento() {
        return estabelecimento;

}
      public String getDataDespesa() {
        return datadespesa;

}
       public String getValorDespesa() {
        return valordespesa;

}
        public String getFormaPagamento() {
        return formapagamento;

}
         public String getDataCheque() {
        return datacheque;

}
          public String getNumeroCheque() {
        return numerocheque;

}
      //Sets

      public void setDespesa(String despesa) {
        this.despesa = despesa;
    }
       public void setEstabelecimento(String estabelecimento) {
        this.estabelecimento = estabelecimento;
    }
        public void setDataDespesa(String datadespesa) {
        this.datadespesa = datadespesa;
    }
         public void setValorDespesa(String valordespesa) {
        this.valordespesa = valordespesa;
    }
          public void setFormaPagamento(String formapagamento) {
        this.formapagamento = formapagamento;
    }
           public void setDataCheque(String datacheque) {
        this.datacheque = datacheque;
    }
            public void setNumeroCheque(String numerocheque) {
        this.numerocheque = numerocheque;
    }

}

Codigo Table Model:ProdutoTableModel


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class ProdutoTableModel extends AbstractTableModel {

    //constantes que vão representar as colunas
    //(só para facilitar o entendimento do código)
    private final int COL_Despesa = 0;
    private final int COL_Estabelecimento = 1;
    private final int COL_DataDespesa = 2;
    private final int COL_ValorDespesa = 3;
    private final int COL_FormaPagamento = 4;
    private final int COL_DataCheque = 5;
    private final int COL_NumeroCheque = 6;

    //lista dos produtos que serão exibidos
    private List<Produto> produtos;

    public ProdutoTableModel() {
        produtos = new ArrayList();
    }

    public ProdutoTableModel(List<Produto> lista) {
        this();
        produtos.addAll(lista);
    }

    public int getRowCount() {
        //cada produto na lista será uma linha
        return produtos.size();
    }

    public int getColumnCount() {
        //vamos exibir só Nome e Quantidade, então são 2 colunas
        return 2;
    }

    @Override
    public String getColumnName(int column) {
        //qual o nome da coluna
        if (column == COL_Despesa) {
            return "Despesa";
        } else if (column == COL_Estabelecimento) {
            return "Estabelecimento";
        }
          else if (column == COL_DataDespesa) {
            return "Data da Despesa";
        }
          else if (column == COL_ValorDespesa) {
            return "Valor da Despesa";
        }
          else if (column == COL_FormaPagamento) {
            return "Forma de Pagamento";
        }
          else if (column == COL_DataCheque) {
            return "Data do Cheque";
        }
          else if (column == COL_NumeroCheque) {
            return "Numero do Cheque";
        }
        return "";
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        //retorna a classe que representa a coluna
        if (columnIndex == COL_Despesa) {
            return String.class;
        } else if (columnIndex == COL_Estabelecimento) {
            return String.class;
        }
          else if (columnIndex == COL_DataDespesa) {
            return String.class;
        }
          else if (columnIndex == COL_ValorDespesa) {
            return String.class;
        }
          else if (columnIndex == COL_FormaPagamento) {
            return String.class;
        }
          else if (columnIndex == COL_DataCheque) {
            return String.class;
        }
          else if (columnIndex == COL_NumeroCheque) {
            return String.class;
        }
        return String.class;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        //pega o produto da linha
        Produto p = produtos.get(rowIndex);

        //verifica qual valor deve ser retornado
        if (columnIndex == COL_Despesa) {
            return p.getDespesa();
        } else if (columnIndex == COL_Estabelecimento) {
            return p.getEstabelecimento();
        }
          else if (columnIndex == COL_DataDespesa) {
            return p.getDataDespesa();
        }
          else if (columnIndex == COL_ValorDespesa) {
            return p.getValorDespesa();
        }
          else if (columnIndex == COL_FormaPagamento) {
            return p.getFormaPagamento();
        }
          else if (columnIndex == COL_DataCheque) {
            return p.getDataCheque();
        }
          else if (columnIndex == COL_NumeroCheque) {
            return p.getNumeroCheque();
        }
        return "";
    }
        @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //no nosso caso todas vão ser editáveis, entao retorna true pra todas
        return true;
    }

   @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //pega o produto da linha
        Produto p = produtos.get(rowIndex);

        //verifica qual valor vai ser alterado
        if (columnIndex == COL_Despesa) {
            p.setDespesa(aValue.toString());
        } else if (columnIndex == COL_Estabelecimento) {
            p.setEstabelecimento(aValue.toString());
        }
          else if (columnIndex == COL_DataDespesa) {
            p.setDataDespesa(aValue.toString());
        }
          else if (columnIndex == COL_ValorDespesa) {
            p.setValorDespesa(aValue.toString());
        }
          else if (columnIndex == COL_FormaPagamento) {
            p.setFormaPagamento(aValue.toString());
        }
          else if (columnIndex == COL_DataCheque) {
            p.setDataCheque(aValue.toString());
        }
          else if (columnIndex == COL_NumeroCheque) {
            p.setNumeroCheque(aValue.toString());
        }
        //avisa que os dados mudaram
        fireTableDataChanged();
    }

    //-----------------------------------------------------
    //Métodos personalizados
    //-----------------------------------------------------
    public void inserir(Produto p) {
        produtos.add(p);

        fireTableDataChanged();
    }

    public void excluir(String pos) {
        produtos.remove(pos);

        fireTableDataChanged();
    }

    public void excluir(Produto p) {
        produtos.remove(p);

        fireTableDataChanged();
    }

    public void ordenarPorValor() {
        //ordena pelo nome
        Collections.sort(produtos, new Comparator<Produto>() {

            public int compare(Produto o1, Produto o2) {
                return o1.getValorDespesa().compareTo(o2.getValorDespesa());
            }
        });
        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }
    

    public void misturar() {
        //mistura a lista
        Collections.shuffle(produtos);

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }

    public Produto getCliente(int pos) {
        if (pos >= produtos.size()) {
            return null;
        }

        return produtos.get(pos);
    }
}

Gostaria de saber aonde esta este erro, e se estou no caminho certo com Table Model, e como faço para inserir meu banco de dados no jtable atraves do tablemodel.

No lugar de:

 public ProdutoTableModel(List<Produto> lista) {  
        this();  
        produtos.addAll(lista);  
    }  

Tente assim:

 public ProdutoTableModel(List<Produto> lista) {  
        produtos = new ArrayList<Produto>(lista);  
    }  

Boa sorte.

Contiunuo a mesma coisa esta dando erro

Erro:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
Conectado!
  symbol:   constructor ProdutoTableModel(java.util.List<model.Produto>)
  location: class ProdutoTableModel
        at Tela_Principal.PreencherTabela(Tela_Principal.java:601)
        at Tela_Principal.btTabelaActionPerformed(Tela_Principal.java:463)
        at Tela_Principal.access$500(Tela_Principal.java:8)
        at Tela_Principal$6.actionPerformed(Tela_Principal.java:123)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Poste o código do método PreencherTablena do arquivo Tela_Principal.java, não esqueça de destacar qual é a linha 601.

Certifique-se também que no seu projeto não existam 2 classes chamadas produto. Uma no pacote model e outra em outro pacote qualquer.

List<Produto> lista = daoProduto.buscarTodos();  
               ProdutoTableModel model = new ProdutoTableModel(lista);//aqui fica grifado a lista ou seja está dando erro.  está e a linha 601
               tblBanco.setModel(model); 

Obrigado este é o codido do metodo preenchertabela()

o restante esta logo acima

Vini gostaria de saber se esta legal meu tablemodel se tem que mudar alguma coisa, e como eu faço para exibir, excluir e atualizar meu banco na tabela atraves do tablemodel, por que adaptei meu codigo ontem eu usava o default entao estoou me adaptando.

Lembrando que mudei por causa das suas cobrança rsrsrs!!!mas está valendo a pena pelo menos no DAO que já me acostumei, agora só falta o tablemodel, mas devagar e com calma tiro de letra, mas me ajudem please.

veja isso: http://www.guj.com.br/java/260577-abstracttablemodel-removendo-registro-do-bd-

t+ e boa sorte.

Me diz uma coisa… por acaso você verificou se não existem 2 classes de Produto no seu projeto?

Aparentemente está tudo certo, seu model está ok. Mas ele está reclamando que não pode converter um List<Produto> num List<model.Produto>, o que me leva a crer que existam 2 classes diferentes para a mesma coisa.

Fernando não consegui entender por que tenho uma classe DAO e uma TableModel minha classe DAo está ok por que até ontem eu usava DefaultTableModel, mas como estou seguindo os conselhos do Vini e de outros membros, mudei para TableModel mas o problema
é tudo novo para mim então eu gostaria de saber como eu faço primeiramente para exibir meu banco na tabela

Os codigos e erro etsão logo acima, eu acredito que o erro esteja na TableModel por que a variavel que recebe o banco no caso lista esta grifado, mas quando eu coloco a tabela para receber, por que até ontem eu usando o DefaultTableModel estava tudo ok, por isto desconfio da table model, mas como sou iniciante tenho um pouco de dificuldade

os codigos esão logo acima.

Obrigado!!!

Entao as classes que tenho é:

Tela Principal
Produto.java
DaoProduto
ProdutoTabela : eu tive que mudar está por que estava duplicada
ProdutoTableModel

O problema esta nesta linha

[code]

public void PreencherTabela(){

            List<Produto> lista = daoProduto.buscarTodos();// esta ok
            ProdutoTableModel model = new ProdutoTableModel(lista); // esta dando o erro aqui na variavel  lista a que recebe o banco
            tblBanco.setModel(model);//esta ok

        }
}[/code]

Já tentou dar um rebuild no seu projeto? É muito estranho pq pelo seu código o construtor está lá, mas por algum motivo, ele não consegue compilar o código fonte.

Uma dúvida. SE você vai exibir apenas 2 colunas, porque seus métodos getValueAt, getColumnClass e setValueAt tem tantas colunas diferentes?

Vai ser mais de duas colunas vai ser o banco todo

ao total sao 7

Entao por que será que está dando o erro na variavel lista???

[code]

public void PreencherTabela(){

            List<Produto> lista = daoProduto.buscarTodos();
            ProdutoTableModel model = new ProdutoTableModel(lista);
            tblBanco.setModel(model);

        }
}[/code]

Quanto a inserir no banco de dados. Crie um método getProdutos() no seu JTable que retorne a lista de produtos:

public List&lt;Produto&gt; getProdutos() { return Collections.unmodifiableList(lista); }

Fora do JTable, basta agora chamar o ProdutoDao para salvar os produtos:

[quote=alucardmaas]Vai ser mais de duas colunas vai ser o banco todo

ao total sao 7[/quote]

Então precisa corrigir o método getColumnCount(). :slight_smile:

Sera que o erro esta ai e como faço isto vini???

Com certeza não. Você usa o Netbeans?

Se usa, tente apagar o arquivo de cache dele:
.netbeans\7.0\var\cache\index

Ja vi coloquei return 7 mas mesmo a variavel continua grifada

Sim uso o netbeans

apaga a psta index

apaga a psta index???
Senao nao for qual o nome do arquivo

Renomeia ela para qualquer outra coisa. Aí vc pode voltar atrás se der m…

ja mudei e abri o Netbeans, está tudo ok, mas a variavel continua a mesma coisa grifada (erro)