JTable exibindo dados repetidos

Salve galera, tenho 1 problema sério com JTable e exibição de dados:
vejam:

    public Vector addLinhas(){
       Vector linha = new Vector();
       Vector addlinha = new Vector();
            
            for(int x = 1; x<=getContador();x++){  
                if(GravaDados()){
                       addlinha.addElement(vnd.getPrd());
                       addlinha.addElement(vnd.getQtd());
                       addlinha.addElement(vnd.getPreco());
                       addlinha.addElement(vnd.getTotal());

                       linha.addElement(addlinha);
                  }
            }
       
       return linha;
   }
    
    public Vector addColunas(){
        final Vector colunas = new Vector();
            colunas.addElement("Produto");
            colunas.addElement("Quantidade");
            colunas.addElement("Valor - R$");
            colunas.addElement("Total - R$");
            
            return colunas;
    }
    
    public DefaultTableModel setaModelo(){
        System.out.println("setaModelo");
        DefaultTableModel modelo = new DefaultTableModel(addLinhas(), addColunas());
        return modelo;        
    }

Este é o model da minha JTable.

    public boolean GravaDados(){
        boolean flag = true;
        try{
            
                //entrada de nome do produto
                vnd.setPrd(String.valueOf(cbxProdutos.getSelectedItem()));
            
                // entrada do valor do produto(substituindo . por ,)     
                setS(lblMostraValor.getText());
                
                // entrada da quantidade de produtos         
                vnd.setQtd(Integer.parseInt(txtQtd.getText()));
          
                // calculo do valor de qtd x valor do produto      
                x = Double.parseDouble(getS().replace(',', '.'));
                
                x = x * Integer.parseInt(txtQtd.getText());
            
                //soma do valor de todos os produtos    
                somavalor = somavalor + x;
            
                //valor da soma.
                setT(String.valueOf(somavalor));
                vnd.setTotal(getT().replace('.', ','));//replace porque o label mostra um valor do tipo 4,02 por exemplo.
                
             
            } catch(Exception e){
                flag = false;
                JOptionPane.showMessageDialog(null,"Erro ao Gravar!","Vendas",3);
                System.out.println(e);
            }
        
        return flag;
    }

Este é o meu método para inserção dos dados da tela na classe Vendas(onde ficam os getters e setters)

    private void btAdicionarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        
        try{
            if(ValidaDados()){
                if(GravaDados()){
                    
                    //setaModelo();
                    
                    tblVendas.setModel(setaModelo());
                    
                    tblVendas.getColumnModel().getColumn(1).setMinWidth(80);
                    tblVendas.getColumnModel().getColumn(1).setMaxWidth(80);
                    tblVendas.getColumnModel().getColumn(2).setMinWidth(80);
                    tblVendas.getColumnModel().getColumn(2).setMaxWidth(80);
                    tblVendas.getColumnModel().getColumn(3).setMinWidth(80);
                    tblVendas.getColumnModel().getColumn(3).setMaxWidth(80);
                    setContador(getContador() +1);
                    if(getContador()>1){
                        cbxCliente.setEnabled(false);
                        
                    }
                }  
            }
        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, "Ocorreu uma falha durante a exibição dos dados.", "Atenção", JOptionPane.ERROR_MESSAGE);
            System.out.println(ex);
        }    
        
    }   

E este é o botão que dispara o evento.

O que a JTable deveria fazer é mostrar os dados digitados em cada linha após o evento do btAdicionar.
Por ex. Colunas – Produto | Quantidade | Valor - R$ | Total - R$
1ª linha --> prd x | 5 | 2,00 | 10,00
2ª linha --> prd y | 3 | 3,00 | 19,00
3ª linha --> prd z | 2 | 10,00 | 39,00

E assim por dianta, mas com o código da maneira como foi passado. o evento do btAdicionar na 1ª vez que é disparado exibe a linha da maneira correta, na 2ª vez, ele exibe as 2 linhas com os valores que eram pra ser somente da 2ª linha, de maneira repetida.
Por ex. Colunas – Produto | Quantidade | Valor - R$ | Total - R$
1ª linha --> prd y | 3 | 3,00 | 9,00
2ª linha --> prd y | 3 | 3,00 | 18,00

sendo assim, a única coisa que permanece correta é a 4ªcoluna onde é mostrado o valor total da compra até aquele momento.

como faço para passar os valores da maneira correta para que a tabela os exiba??

Seu modelo tá meio zoneado!!!(E eu não li aquele arquivo de 21KB, tá grande demais…)
Mas lendo esse seu código aí de cima, não tô vendo nenhum Comparator aí para vc ver se 2 linhas são iguais e não deixar duplicatas na JTable.Aliás, vc deveria usar os métodos de ordenação existentes no Mustang(Java6) específicos para JTable.
Olhe os exemplos daqui:

E aqui(leia Sorting and Filtering com atenção):
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Meu problema não é travar linhas repetidas na JTable, e sim que a JTable duplica as informações passadas, mesmo que elas sejam diferentes na hora que são inseridas no vector… eu pensei em passar como referência uma matriz para a tabela, e passando um vector que é membro de outro vector, eu axei q resolveria, pois não é possível saber quantas linhas vão ser passadas como referência para a tabela… o unico problema é que quando eu passo o Vector com os valores dos getters da classe Vendas, ele exibe todas as linhas com os valores que eram pra ser exibidos só pela última linha…