Comunicacção entre dois forms

Bom pessoal,

Meu pro é o seguinte, eu tenho um cadastro de produtos com dois forms, um mostra os produtos com suas caracteristicas e o outro é o da pesquisa do produto. Eu peço pra abrir o form da pesquisa pelo form de produtos e quero que quando eu clicar na linha da jTable ele volte para o form produtos com o ítem que eu selecionei. Eu só consegui isso se eu abir um novo form produtos atraves do form pesquisa.

O que eu quero é o seguinte:
1 - abrir o form cadastro;
2 - clicar no botão pesquisar do form cadastro;
3 - abrir o form pesquisa;
4 - pesquisar;
5 - voltar para o form cadastro com o item da pesquisa;

segue como eu fiz no form pesquiza:

[code]int r = jTable1.getSelectedRow();

    Produtos fechar = new Produtos();

    try {
        fechar.teste((String) jTable1.getValueAt(r,1));
    } catch (SQLException ex) {
        Logger.getLogger(PesquizaProdutos.class.getName()).log(Level.SEVERE, null, ex);
    }

    fechar.show();

    dispose();[/code]

segue como eu fiz no form produtos:

[code]public void teste(String pesquisa) throws SQLException{

    conn.executeSQL("select * from produtos where descricao like '"+pesquisa+"' order by descricao");
    conn.resultset.next();
    mostraDadosProduto();
}[/code]

Muito obrigado pela atenção.
Rivan

Acredito que você possa usar a classe

JDialog(Dialog owner) , ou variantes de construtores

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JDialog.html

Chamando um JDialog com a JTable dentro, quando selecionar a linha você volta ao formulário de origem pelo “owner”.

Então, estava meio sem o que fazer e resolvi fazer um exemplo bem simples… Espero que te ajude!!!

[code]
package guj;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class FormA extends JFrame {

private static final long serialVersionUID = -8890116584688197586L;

public static void main(String[] args) {
	FormA frame = new FormA();
	frame.setVisible(true);
}

private Pessoa pessoa = new Pessoa();

public FormB getFormB() {
	return new FormB(this);
}

public FormA() {
	setSize(200, 200);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	Container contentPane = getContentPane();
	contentPane.setLayout(null);

	JButton button = new JButton("Click");
	button.setBounds(10, 10, 100, 30);
	button.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			getFormB().setVisible(true);
		}
	});
	contentPane.add(button);

	nomeText.setBounds(10, 50, 150, 20);
	contentPane.add(nomeText);

	cpfText.setBounds(10, 80, 150, 20);
	contentPane.add(cpfText);
}

public Pessoa getPessoa() {
	return pessoa;
}

public void setPessoa(Pessoa pessoa) {
	this.pessoa = pessoa;
}

public void refresh() {
	nomeText.setText(getPessoa().getNome());
	cpfText.setText(getPessoa().getCpf());
}

private JTextField nomeText = new JTextField();

private JTextField cpfText = new JTextField();

}

class Pessoa {

private String nome;

private String cpf;

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getCpf() {
	return cpf;
}

public void setCpf(String cpf) {
	this.cpf = cpf;
}

@Override
public String toString() {
	return "nome: " + nome + ", cpf: " + cpf;
}

}[/code]

package guj;

import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class FormB extends JDialog {

	private static final long serialVersionUID = 662652372927442404L;

	private String[][] dados = new String[2][2];

	@Override
	public FormA getOwner() {
		return (FormA) super.getOwner();
	}
	
	
	public FormB(FormA frame) {
		super(frame);
		dados[0][0] = "QWERT";
		dados[0][1] = "000.111.222-56";
		
		dados[1][0] = "POIUY";
		dados[1][1] = "153.124.912-10";
		
		setSize(200, 200);
		
		setBounds(100, 100, 300, 200);

		Container contentPane = getContentPane();
		
		TableModel dataModel = new AbstractTableModel() {
			public int getColumnCount() {
				return 2;
			}

			public int getRowCount() {
				return dados.length;
			}

			public Object getValueAt(int row, int col) {
				return dados[row][col];
			}
		};
		JTable table = new JTable(dataModel);
		JScrollPane scrollpane = new JScrollPane(table);
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					JTable tmp = (JTable) e.getSource();
					TableModel model = tmp.getModel();
					int index = tmp.getSelectedRow();
					getOwner().getPessoa().setNome((String) model.getValueAt(index, 0));
					getOwner().getPessoa().setCpf((String) model.getValueAt(index, 1));
					getOwner().refresh();
					setVisible(false);
				}
			}
		});
		contentPane.add(scrollpane);
	}
}

A partir da classe FormA que representa um form você clica no botão e exibe o FormB que tem um grid. Dois cliques em um item fecha a janela e atualiza o FormA.

Vê se te ajuda…

Abs

Hendris,

Thanks so much! :smiley: vc salvou uma alma bixo, deu muito certo …
Agora eu vou poder dar andamento no meu projeto.

Rivan Henrique.

Uma outra forma de resolver esse problema é utilizando o padrão Observer…

Fernando