JTable

Pessoal to com uma duvida em uma implementacao sou iniciante e to apanhando aqui da jtable veja so insiro items na linha na minha jtable veja

Code Name Qtde Value
7898458702606 Fernanda Lima 1 1.99
7898458702606 Fernanda Lima 1 1.99
7898458702606 Fernanda Lima 1 1.99

mas eu precisava bolar algum esquema de se eu inserir algum item que ja tenha na minha jtable ele no caso somar as quantidades e valores e nao incrementar varias linhas do mesmo produto! no caso ficaria assim

Code Name Qtde Value
7898458702606 Fernanda Lima 3 5.97

aqui em baixo meu codigo

        String codigo = jt_codB.getText();
        String nome = jt_nome.getText();
        String quantidade = jt_qtde.getText();
        String valorT = jt_valorT.getText();
        modelo.addRow(new Object[]{
                    codigo, nome, quantidade,valorT});

de uma olhada na classe AbstractTableModel
se vc ver JTable tem um construtor que recebe um TableModel
a classe AbstractTableModel implementa essa interfaces
uma maneira de resolver seu problema
seria implementar o seu TableModel extendendo a classe AbstractTableModel e implementando seus métodos abastratos
nessa classe ficaria seus dados ai vc teria um metodo la que adiciona ao total ai vc faz a consistencia
que se aquela pessoa ja existe na coleção entao incrementa o total e dispara um evento para atualizar a JTable
esses eventos a classe AbstractTableModel já lhe oferece é apenas chamar os métodos.

no site da sun tem bastante material, de uma olhada no link abaixo:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Olá, Man_United!

Cara, você pode fazer um método pra calcular esses dados que você quer, e jogar para um model da Table!

Algo assim:


private List<Pessoa> getSomaDados(//passa os dados por parâmetro da pessoa) {

   // Aqui, você faz sua lógica, para calcular a soma dos dados da Fernanda, no caso.
   // Cria um objeto da classe específica (vou chamar de Pessoa), popula ele e retorna.
   // O retorno de uma List é pra caso haja mais pessoas!
}

Você pode modelar a Table assim:

private DefaultTableModel tableModel(List<Pessoa> pessoas) {

   DefaultTableModel tableModel = null;
   Vector<String> colunas = new Vector<String>();
   colunas.add("Coluna 1");
   colunas.add("Coluna 2");
   // E assim por diante...

   try {
      Vector<Object> dados = new Vector<Object>();
      for (Pessoa p : pessoas) {
   
         Vector<String> linha = new Vector<String>();
         linha.add(p.getParametro1());
         linha.add(p.getParametro2());
         linha.add(p.getParametro3());
   
         dados.add(linha);    
      }
   }
   catch (Exception anyError) {}

   tableModel = new DefaultTableModel(dados, colunas);

   return tableModel;
} 

Depois, joga o modelo na Table!

this.pessoasTable = new JTable(this.tableModel(this.getSomaDados(/*Parâmetros para o método*/)));

Tenta algo assim que pode dar certo!

Espero ter ajudado!

[]'s

Voce pode antes de inserir os dados utilizar algum campo unico do registro e verificar se ele existe na jTable…se ele existir voce cria um mentodo que apenas some os campos que voce precisa…

abrass!!!

Entao nicolas mas eh exatamente essa minha duvida como fazer um metodo de pegar as linhas no caso o getSomar entendeu ? o table model eu tenhu feito ja ! e obrigado pela atencao de todos!

Tente algo assim:

private Pessoa getSomaDados(List<Pessoa> pessoas) {

   Integer somaQtde = 0;
   Float     somaValor = 0;
   Pessoa pessoa = new Pessoa();
   
   for (Pessoa p : pessoas) {

         somaQtde += p.getQuantidade();
         somaValor += p.getValor();
      }
   }

   pessoa.setNome(pessoa.getNome());
   pessoa.setQuantidade(somaQtde);
   pessoa.setValor(somaValor);


   return pessoa;
}

Onde pessoas é a lista com os dados que você leu do BD, por exemplo, da pessoa escolhida!

Espero ter ajudado!

[]'s

Ajudo sim muito obrigada vou da uma estudada no seu codigo muito obrigada pela sua atencao!