Problema com organização de telas

5 respostas
C

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.

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();
        
        
        
    }
        
        
        
        
    }

Valeu pela atenção.

5 Respostas

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é+!

C

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.

S

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é+!

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.

C

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);
       
        
        
        
    }
        
        
        
        
    }
F

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.

Criado 15 de abril de 2012
Ultima resposta 23 de abr. de 2012
Respostas 5
Participantes 4