Problema com organização de telas

E aí galera. Meu problema é o seguinte:
Eu preciso que ao clicar num certo botão, como por exemplo “Acessar minha conta”, a janela que estava aberta feche, e abra uma nova janela. Do jeito que eu estou fazendo as telas ficam abertas, e vai abrindo uma em cima da outra e fica muito feio kkkkk.

[code] public class PainelInicial extends JFrame {

public PainelInicial() {
    super("Banco IFSC");
    this.setResizable(false);
    this.setSize(350,70);
    add(montaPainelInicial());
    
    
    
}



public JPanel montaPainelInicial() {
    JPanel p = new JPanel();
    JButton bAcessa = new JButton("Acessar sua conta");
    JButton bCadastra = new JButton("Cadastrar nova conta");
    bCadastra.addActionListener(new CadastraConta());
    p.add(bAcessa);
    p.add(bCadastra);
    
    
    return p;
}

public static void main(String [] args) {
    PainelInicial pi = new PainelInicial();
    pi.show();
    
    
}

}

class CadastraConta implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    PainelCadastro p = new PainelCadastro();
    p.show();
    
    
    
}
    
    
    
    
}

[/code]

Valeu pela atenção.

Quando vc chamar uma nova janela, é só vc dar um this.dispose() e this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) na janela atual!!

Até+!

Mas olhando pro meu código, onde eu colocaria isso ? Estou fazendo esse evento por uma inner class, ou seja, não sei onde eu posso por esse código.

[quote=marcus_vsr]Quando vc chamar uma nova janela, é só vc dar um this.dispose() e this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) na janela atual!!

Até+![/quote]

O setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); vai fechar toda a aplicação, amigo. Você pode colocar assim:


setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

Você coloca dentro do método do evento.

Qualquer dúvida, te auxilio a fazer. Flw.

Coloquei isto no método e não funcionou. Na realidade, eu tive que instanciar o PainelInicial para poder usar o método setDefaultCloseOperation. O meu evento está em uma inner class. Meu código ficou assim:


public class PainelInicial extends JFrame {
    
    
    
    
    public PainelInicial() {
        super("Banco IFSC");
        this.setResizable(false);
        this.setSize(350,70);
        add(montaPainelInicial());
        
        
        
    }
    
    
    
    public JPanel montaPainelInicial() {
        JPanel p = new JPanel();
        JButton bAcessa = new JButton("Acessar sua conta");
        JButton bCadastra = new JButton("Cadastrar nova conta");
        bCadastra.addActionListener(new CadastraConta());
        p.add(bAcessa);
        p.add(bCadastra);
        
        
        return p;
    }
    
    public static void main(String [] args) {
        PainelInicial p = new PainelInicial();
        p.show();
        
    }
    
    
    
}


    class CadastraConta implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        PainelCadastro p = new PainelCadastro();
        p.show();
        PainelInicial pi = new PainelInicial();
        pi.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
       
        
        
        
    }
        
        
        
        
    }

Você esta instanciando a classe PainelInicial duas vezes, então a que você quer fechar não é a mesma que está dentro do método do ActionPerformed. Você tem que usar a mesma instancia.

Sugestão seria criar uma classe set para capturar a instancia.

public PainelInicial setPainelInicial() {
return this.pi;
}

e depois:

PainelInicial pi = setPainelInicial();

De uma lida sobre Orientação a Objetos, essa parte é muito complexa e precisa ser bem estudada.