Transferir dado de uma JTable para outra em outro JFrame

Bom dia, pessoal!
Estou com um problema que está difícil de resolver, pelo menos para mim. Estou tentando “transferir” um dado que está em uma JTable para outro JFrame em outra JTable. O caso é o seguinte:
Eu tenho um sistema de pacotes de viagens, cada pacote é composto por passeios pré cadastrados no banco. O que eu quero é que na hora em que eu estiver cadastrando eu clico em um botão “Adicionar Passeio” e esse botão chamará o JFrame com a JTable com os passeios recuperados do banco. Quando eu clicar duas vezes em um registro da JTable ele deveria enviar o objeto passeio para a JTable do primeiro JFrame.

Este é o método que está no primeiro JFrame, para receber o objeto passeio e adicioná-lo em um ArrayList. A idéia era ir adicionando os objetos selecionados neste ArrayList e ir populando a JTable. Porém, quando eu envio o objeto o ArrayList fica sempre apenas com o registro recém enviado. No caso, eu gostaria que ele fosse recebendo os objetos e fosse acumulando. E a cada objeto novo adicionado ele atualizasse a JTable com o ArrayList atualizado.

Obs. O primeiro JFrame que é a TelaPacotes fica aberto sempre, o segundo que é TelaPasseios abre quando eu clico em adicionar passeio e em seguida fecha após passar o objeto por parâmetro.

Método que recebe o passeio:
public void recebePasseio(Passeio pasEnviado){
p = new ArrayList();
this.p.add(pasEnviado);
this.tblPassPacote.setModel(tabPassPacote);

	for(int i = 0;i<p.size();i++){
		JOptionPane.showMessageDialog(null, "Código: "+ p.get(i).getCodigo());
	}
}

Aqui eu envio o objeto:
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() > 1) {
int selRow = tblPassPacote.getSelectedRow();
Object valor = tblPassPacote.getModel().getValueAt(selRow, 0);
Passeio passeio = new Passeio();
CTRpasseio crtPasseio = new CTRpasseio();

		    	crtPasseio.retornaPasseio(Integer.parseInt(valor.toString()));
		        dispose();
		    }
		}

Pra finalizar, não esta dando erro, apenas não acontece nada. Não popula a JTable e nem acumula os objetos no ArrayList

Você pode passar o model da jTable1 para o frame2. Poderia receber no construtor do 2° frame (se for o caso) ou se ambos frames estão abertos simultaneamente eu não sei exatamente como faz mas sei que são duas threads diferentes (uma para cada frame), você só precisa passar o model da jtable entre elas…

Oi, Douglas. Obrigado por responder.

Sim, eu estou usando o mesmo Model para as duas JTables. A diferença é que em uma eu preencho com dados do banco de dados e a outra com os dados de um ArrayLista, Que seria o que eu quero selecionar desta JTable.

Olá você pode resolver isso facilmente com interfaces, resumindo em código:

public class TelaPasseios {
    
    private OnSelectPasseio acao;
    
    public TelaPasseios (OnSelectPasseio acao) {
         this.acao = acao;
         // Outras coisas do construtor
     }

      public void mouseClicked(MouseEvent e) {
           //códigos omitidos
           acao.onSelect(meuObjetoSelecionado);
           //Fecha a tela 
      }

    // Interface para passar o Passeio para a outra tela
    public interface OnSelectPasseioListner{
        void onSelect(Passeio passeio);
    }
}

Na tela de Pacotes (Sintaxe Java8)

private void buscarPacote(){
   new TelaPasseios((pacote) -> {
     // Aqui você realiza qualquer ação com o pacote recebido.
  }).setVisible(true);
}

Em resumo quem define o que vai ocorrer quando selecionar um passeio é quem chamou a TelaPasseios. E na sua interface você poderá definir quantos parâmetros quiser retornar no método onSelect, nesse caso o que importa é o objeto Passeio, mas se quisesse passar mais coisas podia.

Uso essa abordagem há muito tempo para telas de busca.

1 curtida

Obrigado pela resposta, Andrauss! Realmente resolveu o problema! Obrigado.