Transferir registros JTable para outro JTable

4 respostas
B

Olá, não sei se consigo ser bem claro no que preciso, mas vou tentar.

Eu tenho um JTable com uma lista dos clientes na empresa.
Tenho um botão >, >>, <, <<

Ao clicar no botão >, o sistema irá transferir o cliente selecionado para outro jTable. Ao clicar no botão >>, o sistema irá tranferir todos os clientes.
Não estou conseguindo pensar em como fazer essa transferencia. Acho que estou errando nos indices dos laços, pois está duplicando os clientes escolhidos no segundo JTable.

DefaultTableModel modelo = (DefaultTableModel)tblListaClienteEscolhido.getModel();
       DefaultTableModel modelo2 = (DefaultTableModel)tblListaCliente.getModel();

       int idEsc[] = tblListaCliente.getSelectedRows();

       int rowClienteEscolhido = tblListaClienteEscolhido.getRowCount();

       for(int i=0; i < idEsc.length; i++)
       {
           String idCliente = (String)modelo2.getValueAt(idEsc[i], 0);
           String nomeCliente = (String)modelo2.getValueAt(idEsc[i], 1);

           //Se não for a primeira vez

           if(rowClienteEscolhido>0)
           {
                for(int j=0; j < rowClienteEscolhido; j++)
                {
                       if(!idCliente.equals(modelo.getValueAt(j, 0)))
                       {
                           modelo.addRow(new Object [] { modelo2.getValueAt(idEsc[i], 0),
                                                modelo2.getValueAt(idEsc[i], 1)});
                       }
                }
           }
           else
           {
                modelo.addRow(new Object [] { idCliente,
                                                nomeCliente});
           }

       }

4 Respostas

A

blst, em momento algum você retirou o usuário da outra tabela. Se seguirmos a lógica do que você está querendo, você fará assim:

1º - Verificar se existe na tabela 1;

2º - Copiar valor para tabela 2;

3º - Remover valor da tabela 1;

4º - Salvar valores das tabelas;

se você não remover o item da tabela 1, então realmente você sempre duplicará os valores.
veja qual é o método para remover a linha selecionada na tabela 1, não estou lembrando aqui de cabeça
mas o trabalho que você quer é puramente de lógica.

ViniGodoy

É realmente muito difícil usar o JTable, quando você não sabe como o JTable funciona.

O primeiro passo para resolver essa (e inúmeras outras dúvidas) é se livrar do DefaultTableModel. Se você precisa desse tipo de manipulação, esse modelo irá te trazer dificuldades incríveis, como a que você está presenciando agora.

Siga os links da minha assinatura para aprender a fazer seu próprio tablemodel, filho de AbstractTableModel. Mover clientes vai ser uma questão de mover objetos de negócio entre listas, muito mais fácil do que a gambi que vai surgir se você continuar por esse tortuoso caminho que você está seguindo com o Default.

Marky.Vasconcelos

Seguindo a dica do ViniGodoy, voce faria apenas isso.

Cliente cli = model.getValue(list.getSelectedRow());
model.remove(cli);
model2.add(cli);

E pronto, voce transferiu, e sera quase tão simples como isso para colocar todos os objetos.

ViniGodoy

Ou, ainda:

modelo2.add(modelo.remove(tblListaClienteEscolhido.getSelectedRow()));
Criado 20 de setembro de 2010
Ultima resposta 21 de set. de 2010
Respostas 4
Participantes 4