Como fechar um jpanel atraves de outro jpane de uma classe diferente no mesmo pacote

Ola estou com o seguinte problema tenho um painel que chama outro painel de outra classe, como posso fechar este painel que foi chamado atraves do mesmo painel que o chamou?

exemplo

O PainelA chama o PainelB através de um botão.
Como fechar o PainelB através deste mesmo botão?

este é o PainelA


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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PainelA extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton AbrirFecharPainel = null;
	private int a;
	
	public PainelA() {
		super();
		initialize();
	}

	
	private void initialize() {
		this.setSize(446, 243);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getAbrirFecharPainel(), null);
		}
		return jContentPane;
	}

	
	private JButton getAbrirFecharPainel() {
		if (AbrirFecharPainel == null) {
			AbrirFecharPainel = new JButton();
			AbrirFecharPainel.setBounds(new Rectangle(168, 61, 113, 56));
			AbrirFecharPainel.setText("ABRIR");
			
			AbrirFecharPainel.addActionListener(new ActionListener(){
		        public void actionPerformed(ActionEvent e) {		        	
		        	if(a==0){
		        	a=1;
		        	AbrirFecharPainel.setText("FECHAR");
		        	PainelB abrir = new PainelB();
		        	abrir.setVisible(true);
		        	
		        	}
		        	else{
		        	a=0;	
		        	AbrirFecharPainel.setText("ABRIR");   
		        	
		        	}
		        	
			    	}
		       
			        });
			
		}
	
		return AbrirFecharPainel;
	}

} 

Aqui o PainelB


import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PainelB extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;

	
	public PainelB() {
		super();
		initialize();
	}

	
	private void initialize() {
		this.setSize(596, 222);
		this.setBounds(300, 300, 452, 427);		
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
		}
		return jContentPane;
	}

}  

Se alguem me ajudar agradeço.

1º leia aqui antes de postar ajudaria bastante

http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor/5

caso vc usar o

dispose(); 

acho que ajuda a fechar sua tela

Cara ja tentei o dispose() mas não fechou , so se estou fazendo errado.

Ja faz um tempo que não entro no forum por isto não lembro de todas as regras foi mau.

já tentou tbm o

System.exit(0); 

[quote=tiora]Ja faz um tempo que não entro no forum por isto não lembro de todas as regras foi mau.

[/quote]

Bom dia a todos.

Tente atribuir o valor null a instância do JPanel, após invocar o método dispose(), assim:

    meupanel.dispose();
    meupanel = null;

Agora o importante também seria você dar um refresh no JFrame que continha este JPanel, assim


   pack();  

   // ou

   repaint();
if(pb == null){
                    pb = new PanelB();
                    pb.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    pb.setVisible(true);
                }else{
                    pb.dispose();
                }

Onde pb = PanelB.

Eu tentaria o seguinte:

//PainelA

//Declare o PainelB como uma variável de classe
private PainelB b;

public void actionPerformed(ActionEvent e){
    
     if(AbrirFecharPainel.getText().equals("ABRIR)){
            b = new PainelB();
            b.setVisible(true);
            AbrirFecharPainel.setText("FECHAR);
     }else if(AbrirFecharPainel.getText().equals("FECHAR)){ 
            //Como o PainelB é uma variável de classe e já foi instanciado, talvez isso funcione
            b.setVisible(false);
            AbrirFecharPainel.setText("ABRIR);
     }

}

Boa tarde a todos.

O todos esqueceram, [color=red]inclusive eu[/color], é que o método “getJContentPane()” é diferente do método getContentPane do JFrame, ou seja, o primeiro método é um método criado pelo usuário, no caso o nosso amigo Tiora.

De qualquer forma, voce tem que adicionar o panel dentro JFrame através do seu método “add(Component comp)” ou “getContentPane().add(Component comp)” e ao meu ver não precisaria criar aquele método lá de cima (getJContentPane()), pois voce pode adicionar ou remover o componente com o getContentPane() do JFrame, de seguinte maneira:

      
     if(AbrirFecharPainel.getText().equals("ABRIR)){  
            b = new PainelB();  
            getContentPane().add(b);  
            AbrirFecharPainel.setText("FECHAR);  
     }else if(AbrirFecharPainel.getText().equals("FECHAR)){   
            //Como o PainelB é uma variável de classe e já foi instanciado, talvez isso funcione  
            getContentPane().remove(b);
            b.dispose();
            b = null;  
            AbrirFecharPainel.setText("ABRIR);  
     }

     //  O ideal seria este:
     if (b == null) {
        b = new PainelB();
        getContentPane().add(b);
     } else {
        getContentPane().remove(b);
        b.dispose();
        b = null;
     }     

Quando voce adiciona qualquer componente ao JFrame, este passa ser o Container de todos os componentes inseridos dentro de sua interface, sendo o JFrame responsável pela visualização de todos os componentes inseridos nele, dando automaticamente um “setVisible(true)” em todos, bem como, fica também responsável por tirar o componente da tela no ato de sua remoção, assim sendo voce não precisa ficar setando o setVisible(true) a toda hora.

Boa tarde a todos , primeiro quero dizer que ainda sou iniciante em java conheço pouco.

fiz o sugerido pelos amigos mas o bendito painel ainda não fecha. Ou ele abre outro a cada clique ou nem abre.
se tiverem mais soluções fico grato.

Cara fiz o que o amigo " drsmachado" e deu certinho declarei o painelB como uma variavel de classe e acrescentei “pb=null” pois queria que a cada clique ele abrice e o outro clique ele fechasse. Muito bom obrigado pessoal .