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