Jtable substituindo a linha anterior

Olá, Estou com um problema chato, Tenho um Jframe para fazer orçamentos, nesse Jframe tenho uma Jtable
vazia que recebe os dados de um outro Jframe no qual eu busco os produtos, A ideia é o seguinte ao clicar no botão adicionar produto é aberto o jframe onde localizo os produtos, ao dar duplo clique na Jtable dos produtos
ela envia o produto selecionado para o JFrame de orçamentos e popula a Jtable q existe nele.Aqui mora o problema, meu código está enviando corretamente e a Jtable dos orçamentos está recebendo o produto selecionado perfeitamente, porém ao repetir o processo para adicionar um novo produto o código está sobrescrevendo a linha anterior, ou seja o Jtable so tem uma linha quando deveria ir adicionando os produtos linha após linha. Se alguém puder me ajudar agradeço muito.Segue o código:

private void btnBuscaProdActionPerformed(java.awt.event.ActionEvent evt) {

    FrmBuscaProd busca_prod = new FrmBuscaProd(new JFrame(),true);
    busca_prod.setVisible(true);
    ArrayList dados = new ArrayList();
    String[] colunas = new String[]{"Código", "Descrição do Produto", "Preço","EAN"}; 
    try {
       // do {
            dados.add(new Object[]{busca_prod.modBuscaProd.getCod(), busca_prod.modBuscaProd.getProduto(), busca_prod.modBuscaProd.getValor(),busca_prod.modBuscaProd.getEan()});
        //} while(conn.rs.next());
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Erro");
    }
    ModeloTabela modelo = new ModeloTabela(dados, colunas);
    jTableOrcamento.setModel(modelo);
    jTableOrcamento.getColumnModel().getColumn(0).setPreferredWidth(50);//Código
    jTableOrcamento.getColumnModel().getColumn(0).setResizable(false);
    jTableOrcamento.getColumnModel().getColumn(1).setPreferredWidth(200);//Descrição do Produto
    jTableOrcamento.getColumnModel().getColumn(1).setResizable(false);
    jTableOrcamento.getColumnModel().getColumn(2).setPreferredWidth(55);//Preço
    jTableOrcamento.getColumnModel().getColumn(2).setResizable(false);
    jTableOrcamento.getColumnModel().getColumn(3).setPreferredWidth(115);//EAN
    jTableOrcamento.getColumnModel().getColumn(3).setResizable(false);
    jTableOrcamento.getTableHeader().setReorderingAllowed(false);
    jTableOrcamento.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    jTableOrcamento.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    
}

Precisamos ver o código da classe ModeloTabela, pois é onde se encontra o método que adiciona os dados na tabela, certo?

Segue o código.

package modelo;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class ModeloTabela extends AbstractTableModel {

private ArrayList linhas = null;
private String[] colunas = null;

public ModeloTabela(ArrayList lin, String[] col) {
    setLinhas(lin);
    setColunas(col);
}

public ArrayList getLinhas() {
    return linhas;
}

public void setLinhas(ArrayList dados) {
    linhas = dados;
}

public String[] getColunas(){
    return colunas;
    
}
public void setColunas(String[] nomes){
    colunas = nomes;
}

public int getColumnCount(){
    return colunas.length;
}

public int getRowCount(){
    return linhas.size();
}

public String getColumnName(int numCol){
    return colunas[numCol];       
}
public Object getValueAt(int numLin,int numCol){
    Object[] linha = (Object[])getLinhas().get(numLin);
    return linha[numCol];
} 

}

Você constrói a tabela e nunca adiciona elementos à ela (novas linhas)?
Não identifiquei o método que adiciona.

Da forma q esta eu uso com o banco de dados, na linha comentada do do while ela vai adicionando enquanto tiver resultados no resultset, porem neste exemplo do problema eu não uso banco de dados acho q falta alguma condição nesse do while comentado, porem n consegui pensar em nenhuma.