Pegando dados com o ActionPerformed

Olá, eu gostaria de saber como que eu faço pra quando eu clicar no botao de listar ele deverá abrir uma só vez o JTable e não ficar adicionando várias tabelas dentro do panel de listar toda vez que eu clicar em listar, e quando eu volto a clicar no botao cadastrar ele não mostra a janela de cadastro… E também gostaria de saber como eu faço para armazenar os dados na JTable. Segue o código abaixo:

import javax.print.attribute.standard.JobMessageFromOperator;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.;
import java.awt.event.
;
import java.util.Collections;
import java.util.Vector;

public class CardDeck extends JFrame implements ActionListener {
private CardLayout cardManager;
private JPanel deck, panMasc;
private JButton controls[];
private String names[] = { “Cadastrar”, “Listar”,
“Consultar”, “Pesquisar”,“Sair” };
private JRadioButton mascButton, femButton;
private ButtonGroup group;
private JPanel panel,panel2, panListMasc;
private JTextField nomeCampo, idadeCampo, cpfCampo, dataCampo, estCampo, criCampo, qtdCampo;
private String nome, idade, cpf, data, estCivil, criancas, qtdGravida;
private JButton butaoOk;
private JFrame frame;
private Vector homem;
private Vector mulher;
public CardDeck()
{
frame = new JFrame( "CardLayout " );

  Container c = frame.getContentPane();
  panel = new JPanel();
  panel2 = new JPanel();
  deck = new JPanel();
  cardManager = new CardLayout(); 
  deck.setLayout( cardManager );  
  homem = new Vector();
  mulher = new Vector();
  panMasc = new JPanel();
  
  //Monta o primeiro botão;
  montaBotao(new JLabel("Cadastrar") , panel, deck);
  montaJanelaCadastrar(panel);
  
  //Monta o segundo botão;
  montaBotao(new JLabel("Listar") , panel2, deck);
  panel2.setLayout(new GridLayout(2,1));
  montaJanelaListarMasc(panel2);
  montaJanelaListarFem(panel2);
  //montaJanelaListar(panel2);
  //Monta o terceiro botão
  montaBotao(new JLabel("Consultar") , new JPanel(), deck);
  
  //Monta o quarto botao
  montaBotao(new JLabel("Pesquisar") , new JPanel(), deck);
  //Monta o quinto botao
  montaBotao(new JLabel("Sair") , new JPanel(), deck);

  JPanel buttons = new JPanel();
  buttons.setLayout( new GridLayout( 5, 1 ) );
  controls = new JButton[ names.length ];

  for ( int i = 0; i < controls.length; i++ ) {
     controls[ i ] = new JButton( names[ i ] );
     controls[ i ].addActionListener( this );
     buttons.add( controls[ i ] );
  }
  c.add( buttons, BorderLayout.WEST );
  c.add( deck, BorderLayout.EAST );
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.pack();
  frame.setVisible(true);

}
public void montaBotao(JLabel label, JPanel panel, JPanel deck)
{
deck.add( panel, label.getText());

}
public void actionPerformed( ActionEvent e )
{
if ( e.getSource() == controls[ 0 ] )
cardManager.show(deck,“Cadastrar”);
else if ( e.getSource() == controls[ 1 ] )
{
Collections.reverse(homem);
panel2.setLayout(new GridLayout(2,1));
cardManager.show(deck, “Listar”);
}
else if ( e.getSource() == controls[ 2 ] )
{
cardManager.show(deck, “Consultar”);

  }
  else if ( e.getSource() == controls[ 3 ] )
	  cardManager.show(deck, "Pesquisar");  
  else if ( e.getSource() == controls[ 4 ] )
  {
	  cardManager.show(deck, "Sair");
	  System.exit(0);
  }
  else if(e.getSource() == mascButton)
  {
		panMasc.setVisible(true);
        estCampo = new JTextField(10);
        panMasc.add(new JLabel("Estado Civil:"));
        panMasc.add(estCampo);
    	panel.add(panMasc);
        frame.setVisible(true);
        //panel.remove(panMasc);
  }
  else if(e.getSource() == butaoOk)
  {	
	int valida=0;
	nome = nomeCampo.getText();
	if(nome.isEmpty() == true)
	{
	  JOptionPane.showMessageDialog(null, "ERRO! O campo nome deve ser preenchido!");
	  valida++;
	}
	idade = idadeCampo.getText();
	if(idade.isEmpty() == true)
	{
	  JOptionPane.showMessageDialog(null, "ERRO! O campo idade deve ser preenchido!");
	  valida++;
	}
	data = dataCampo.getText();
	if(data.isEmpty() == true)
	{
	  JOptionPane.showMessageDialog(null, "ERRO! O campo data deve ser preenchido!");
	  valida++;
	}
	cpf = cpfCampo.getText();
	if(cpf.isEmpty() == true)
	{
	  JOptionPane.showMessageDialog(null, "ERRO! O campo cpf deve ser preenchido!");
	  valida++;
	}
	if((mascButton.isSelected() == false && femButton.isSelected() == false))
	{
	  JOptionPane.showMessageDialog(null, "ERRO! O Radio Button masculino ou feminino deve ser selecionado!");
	  valida++;
	}
	if((mascButton.isSelected() == true) && (valida == 0))  
	{ 
		Masculino masculino = new Masculino();
		estCivil = estCampo.getText();
		if(estCivil.isEmpty() == true)
		  JOptionPane.showMessageDialog(null, "ERRO! O campo de estado civil deve ser preenchido!");
		masculino.setNome(nome);
		masculino.setIdade(idade);
		masculino.setData(data);
		masculino.setSexo("Masculino");
		masculino.setEstCivil(estCivil);
		masculino.setCpf(cpf);
		estCampo.setText("");
		homem.add(masculino);
	}	
	else if(femButton.isSelected() == true) 
	{
	  Feminino feminino = new Feminino();
	  criancas = criCampo.getText();
	  qtdGravida = qtdCampo.getText();
	  feminino.setNome(nome);
	  feminino.setIdade(idade);
	  feminino.setData(data);
	  feminino.setCpf(cpf);
	  feminino.setCriancas(criancas);
	  feminino.setQtdGravida(qtdGravida);
	  criCampo.setText("");
	  qtdCampo.setText("");
	  mulher.add(feminino);
	}
	
	nomeCampo.setText("");
	idadeCampo.setText("");
	cpfCampo.setText("");
	dataCampo.setText("");
	
	cardManager.show(deck, "Cadastrar");
  }

}

public static void main( String args[] )
{
CardDeck cardDeckDemo = new CardDeck();
}
public void montaJanelaCadastrar(JPanel panel)
{
mascButton = new JRadioButton(“Masculino”);
femButton = new JRadioButton(“Feminino”);
group = new ButtonGroup();
JPanel panNome = new JPanel();
JPanel panIdade = new JPanel();
JPanel panSexo = new JPanel();
JPanel panOk = new JPanel();
JPanel panCpf = new JPanel();
JPanel panData = new JPanel();

   butaoOk = new JButton("OK");
   
   panel.setLayout(new GridLayout(5, 1)); 
   
   nomeCampo = new JTextField(20);
   panNome.add(new JLabel("Nome"));
   panNome.add(nomeCampo);
   
   panel.add(panNome);
   
   panIdade.add(new JLabel("Idade"));
   idadeCampo = new JTextField(3);
   panIdade.add(idadeCampo);
   panel.add(panIdade);
   
   panData.add(new JLabel("Data:"));
   dataCampo = new JTextField(10);
   panData.add(dataCampo);
   panel.add(panData);
   
   panCpf.add(new JLabel("CPF"));
   cpfCampo = new JTextField(11);
   panCpf.add(cpfCampo);
   panel.add(panCpf);
   
   panSexo.add(new JLabel("Sexo:"));
   panSexo.add(mascButton);
   mascButton.addActionListener(this);
   panSexo.add(femButton);
   group.add(mascButton);
   group.add(femButton);
   panel.add(panSexo);
  
   panOk.add(new JLabel("Aperte OK para cadastrar outra pessoa"), JFrame.BOTTOM_ALIGNMENT);
   butaoOk.addActionListener(this);
   panOk.add(butaoOk);
   panel.add(panOk);

}

public void montaJanelaListarMasc(JPanel panel2){
final DefaultTableModel modelo = new DefaultTableModel();

    JTable tabela = new JTable(modelo);
    
    modelo.addColumn("Nome");
    modelo.addColumn("Idade");
    modelo.addColumn("Sexo");
    modelo.addColumn("CPF");
    modelo.addColumn("Data");
    modelo.addColumn("Estado Civil");
    
    tabela.setPreferredScrollableViewportSize(new 
        Dimension(420, 50));
			
    JScrollPane scrollPane = new JScrollPane(tabela);

    panel2.add(scrollPane);
   
    setSize(400, 300);
  }
 public void montaJanelaListarFem(JPanel panel2){
    final DefaultTableModel modelo = new DefaultTableModel();
    // constrói a tabela
    JTable tabela = new JTable(modelo);
    // Cria duas colunas
    modelo.addColumn("Nome");
    modelo.addColumn("Idade");
    modelo.addColumn("Sexo");
    modelo.addColumn("CPF");
    modelo.addColumn("Qtd de vezes que ficou gravida");
    modelo.addColumn("Qtd de crianças");
    
    tabela.setPreferredScrollableViewportSize(new 
        Dimension(600, 50));
	
    //Container c = getContentPane();
    //panel2.setLayout(new FlowLayout());
			
    JScrollPane scrollPane = new JScrollPane(tabela);
    //c.add();
    panel2.add(scrollPane);
    	
    setSize(600, 300);
  }

}