Passar valores de um Jframe para outro jframe

Caros colegas, tenho o seguinte problema:
duas frames a primeita se chama classe mae e a segunda classe filha, em ambas possuo um textfield e um button, quando clico no botao, este me chama a classe filha, na classe filha preencho o campo do textfield e clico no botao, este botao deveria fechar a frame e colocar o valor de textfield da classe filha na classe mae, mas quando faço isto nada ocorre, como posso resolver este problema, o codigo é este

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;

public class Mae extends JFrame {

private JPanel jContentPane = null;
private JButton jButtonMAe = null;
private JTextField jTextFieldMae = null;

/**
 * This method initializes jButtonMAe	
 * 	
 * @return javax.swing.JButton	
 */
private JButton getJButtonMAe() {
	if (jButtonMAe == null) {
		jButtonMAe = new JButton();
		jButtonMAe.setBounds(new java.awt.Rectangle(15,14,265,25));
		jButtonMAe.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
				//TabelaCnae1 t = new TabelaCnae1();
				//t.setVisible(true);
				Filho f = new Filho();
				f.setVisible(true);
			}
		});
	}
	return jButtonMAe;
}

/**
 * This method initializes jTextFieldMae	
 * 	
 * @return javax.swing.JTextField	
 */
public JTextField getJTextFieldMae() {
	if (jTextFieldMae == null) {
		jTextFieldMae = new JTextField();
		jTextFieldMae.setBounds(new java.awt.Rectangle(16,57,261,35));
	}
	return jTextFieldMae;
}

/**
 * @param args
 */
public static void main(String[] args) {
	Mae m = new Mae();
	m.setVisible(true);
	// TODO Auto-generated method stub

}

/**
 * This is the default constructor
 */
public Mae() {
	super();
	initialize();
}

/**
 * This method initializes this
 * 
 * @return void
 */
private void initialize() {
	this.setSize(300, 200);
	this.setContentPane(getJContentPane());
	this.setTitle("MAe");
}

/**
 * This method initializes jContentPane
 * 
 * @return javax.swing.JPanel
 */
private JPanel getJContentPane() {
	if (jContentPane == null) {
		jContentPane = new JPanel();
		jContentPane.setLayout(null);
		jContentPane.add(getJButtonMAe(), null);
		jContentPane.add(getJTextFieldMae(), null);
	}
	return jContentPane;
}

}
//----------------classe filha---------------
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;

public class Filho extends JFrame {

private JPanel jContentPane = null;
private JButton jButtonFilho = null;
private JTextField jTextFieldfilho = null;
private JTextField jTextFieldfilho1 = null;
public Mae mae;

/**
 * This is the default constructor
 */
public Filho() {
	super();
	initialize();
}

public Filho(ActionListener listener) {
	// TODO Auto-generated constructor stub
}

/**
 * This method initializes this
 * 
 * @return void
 */
private void initialize() {
	this.setSize(300, 200);
	this.setContentPane(getJContentPane());
	this.setTitle("JFrame");
}

/**
 * This method initializes jContentPane
 * 
 * @return javax.swing.JPanel
 */
private JPanel getJContentPane() {
	if (jContentPane == null) {
		jContentPane = new JPanel();
		jContentPane.setLayout(null);
		jContentPane.add(getJButtonFilho(), null);
		jContentPane.add(getJTextFieldfilho(), null);
		jContentPane.add(getJTextFieldfilho1(), null);
	}
	return jContentPane;
}

/**
 * This method initializes jButtonFilho	
 * 	
 * @return javax.swing.JButton	
 */
private JButton getJButtonFilho() {
	if (jButtonFilho == null) {
		jButtonFilho = new JButton();
		jButtonFilho.setBounds(new java.awt.Rectangle(0,0,292,29));
		jButtonFilho.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
				String nome = jTextFieldfilho1.getText();
				mae = new Mae();
				mae.getJTextFieldMae().setText(nome);
				dispose();
			}
		});
	}
	return jButtonFilho;
}

/**
 * This method initializes jTextFieldfilho	
 * 	
 * @return javax.swing.JTextField	
 */
private JTextField getJTextFieldfilho() {
	if (jTextFieldfilho == null) {
		jTextFieldfilho = new JTextField();
		jTextFieldfilho.setBounds(new java.awt.Rectangle(0,10,4,163));
	}
	return jTextFieldfilho;
}

/**
 * This method initializes jTextFieldfilho1	
 * 	
 * @return javax.swing.JTextField	
 */
private JTextField getJTextFieldfilho1() {
	if (jTextFieldfilho1 == null) {
		jTextFieldfilho1 = new JTextField();
		jTextFieldfilho1.setBounds(new java.awt.Rectangle(12,62,259,36));
	}
	return jTextFieldfilho1;
}

}