Alternando entre um formulário e outro

Pessoal, postei uma dúvida aqui onte sobre como preencher os campos de um formulario com dados de outro. Hoje consegui resolver aqui, gracas a Deus. Porem, tem algo que ainda nao está dando certo, eu tenho um form chamado frmVendas com o campo codProduto e NomeProduto, e o que eu fiz ? estando em um desses campos e apertando a tecla Tab abre-se a tela de busca geral de produtos, frmProdutosBuscaGeral que tem os dados de todos os produtos, ao clicar no produto escolhido preencho todos os campos desejados na tela de vendas. Isso ta funcionando belezinha, porem, com alguns problemas que notei.
1 - só estou conseguindo fazer com que o Tab funcione depois de pressionar duas vezes, apertando a primeira nao acontece nada. 2 - quando aciono o Tab e a tela de busca de produtos se abre, quando clico na tabela de produtos, embora a tela se feche, percebo que continua lá, rodando. 3 - Ao voltar para a tela de vendas, se eu usar o Tab novamente para fazer uma nova busca e inserir mais um produto, percebo que há duas, tres ou mais telas de vendas abertas, e cada uma delas com o preenchimento que foi feito.

Vejam meu código:

Estando no campo CodProduto e apertando o TAB

txtCodProduto.addFocusListener(new java.awt.event.FocusAdapter() {
            
            public void focusLost(java.awt.event.FocusEvent evt){
                
               frmProdutosBuscaGeral tela = new frmProdutosBuscaGeral();
               tela.setVisible(true);
            
            }
            
            
        });

Ao clicar na tabela que contem a relação dos produtos

frmVendas tela2 = new frmVendas();
      
        //Passo 2 Pegando os dados do cliente clicado e preenchendo os campos da aba Dados Pessoais ( jTabbedPane1)
        tela2.txtCodProduto.setText(tabelaProdutos.getValueAt(tabelaProdutos.getSelectedRow(),0).toString());
        tela2.txtDescricao.setText(tabelaProdutos.getValueAt(tabelaProdutos.getSelectedRow(),1).toString());
        tela2.txtPreco_Unitario.setText(tabelaProdutos.getValueAt(tabelaProdutos.getSelectedRow(),2).toString());
        
        tela2.setVisible(true);
        setVisible(false);

Alguem poderia me dizer o que fiz de errado ?