Comunicacção entre dois forms

4 respostas
R

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:
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();
segue como eu fiz no form produtos:
public void teste(String pesquisa) throws SQLException{

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

Muito obrigado pela atenção.
Rivan

4 Respostas

Roger75

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”.

H

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

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;
	}
}
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] = "[CPF removido]";
		
		dados[1][0] = "POIUY";
		dados[1][1] = "[CPF removido]";
		
		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

R

Hendris,

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

Rivan Henrique.

Fernando_Generoso_da

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

Fernando

Criado 30 de julho de 2009
Ultima resposta 31 de jul. de 2009
Respostas 4
Participantes 4