JTable

6 respostas
M

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

6 Respostas

marcosharbs

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

Nicolas_Fernandes

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

MaTToS

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!!!

M

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!

Nicolas_Fernandes

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

B

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

Criado 16 de setembro de 2009
Ultima resposta 18 de set. de 2009
Respostas 6
Participantes 5