Botao da Classe x tem que Fechar JFrame da classe z [PROBLEMAS]

Galera, sou novo por aqui mas não no java(mais ou menos 1 ano) e ainda sim estou enfrentando alguns erros. Por exemplo, estou com um problema num projeto meu que é o seguinte.

No Lugar do JOptionPane eu criei uma classe que será um formulário com fundo personalizado que exibirá uma mensagem como se fosse um JOptionPane, e quando ele clica no botao tem que ocorrer o seguinte: fechar o JDialog Atual, Fechar o JFrame do MenuPrincipal e Abrir o JDialog da tela de Login. Bom a única coisa que ele não faz e fechar o JFrame do MenuPrincipal ele fecha a tela que representa o JOptionPane e abre a tela de Login mas não fechar o JFrame do MenuPrincipal.

Este é o código:

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

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.border.Border;

import static java.awt.GraphicsDevice.WindowTranslucency.*;

public class Mensagem extends JDialog{
JButton btnSim, btnNao;
JLabel lblMsg, lblImgFundo;
String[] div;
String mensagemPronta = “”;
JTextArea txtmsg;

public Mensagem(String mensagem, int tipo, String lugar){
	this.setSize(385, 228 );
	this.setModal(true);                         //mensagem é o atributo que recebe o texto da mensagem
	this.setLocationRelativeTo(null);       //tipo é o atributo que recebe o tipo da mensagem a ser exibida CONFIRM ou MESSAGE
	this.setResizable(false);                  //lugar é o atributo que recebe um texto da onde que foi instanciado um objeto desta classe pra fazer a verificação e decidir o que vai no                               evento deste botao
	this.setLayout(null);
	this.setTitle("     Mensagem do Sistema");
	
	btnSim = new JButton("Sim");
	btnSim.setBounds(237, 149, 64, 38 );
	btnSim.setVisible(false);
	this.add(btnSim);
	
	btnNao = new JButton("Não");
	btnNao.setBounds(305, 149, 64, 38 );
	btnNao.setVisible(false);
	this.add(btnNao);
	
	txtmsg = new JTextArea();
	txtmsg.setBounds(90,50,278,80 );
	txtmsg.setEditable(false); 
	txtmsg.setLineWrap(true);  
	txtmsg.setBorder(null);  
	txtmsg.setOpaque(false); 
	txtmsg.setText(mensagem);
	this.add(txtmsg);
	
	lblMsg = new JLabel(mensagemPronta);
	lblMsg.setBounds(90, 50, 490, 15 );
	//this.add(lblMsg);
	
	lblImgFundo = new JLabel();
	lblImgFundo.setBounds(0,0,400,200 );
	this.add(lblImgFundo);	
	
	if(tipo == 0){
		lblImgFundo.setIcon(new ImageIcon("src/Imagens/Fundos/confirm.png"));
		btnSim.setVisible(true);
		btnNao.setVisible(true);
		
		verificandoLocal_0(lugar);
	}else{
		lblImgFundo.setIcon(new ImageIcon("src/Imagens/Fundos/message.png"));
		btnNao.setText("OK");
		btnNao.setVisible(true);
		
		verificandoLocal_1(lugar);
	}
}

public void verificandoLocal_0(String local){
	
	btnNao.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			dispose();
		}
	});
	
	if(local.equals("MenuPrincipal_0")){
		btnSim.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}
	
            //o problema ta aqui, dentro deste if

	if(local.equals("MenuPrincipal_1")){
		btnSim.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
				
				MenuPrincipal menu = new MenuPrincipal();
				menu.setVisible(false);
				
				Login app = new Login();
				app.setVisible(true);                                //ja troquei a ordem mas nada adiantou
			}
		});
	}
            //e termina aqui
	
	if(local.equals("Login")){
		btnSim.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {						
				System.exit(0);
			}
		});
	}
	
}

public void verificandoLocal_1(String local){
	btnNao.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			dispose();
		}
	});
	
	if(local.equals("Login_1")){
		MenuPrincipal app = new MenuPrincipal();
		app.setVisible(true);
	}
}

}

espero que voces me ajudem! obrigado desde já

posta o codigo entre a tag code…

Bem vindo ao fórum :smiley:

Ao postar seu código fonte utilize a tag code.

Porque você não cria um método public na janela que quer fechar e coloca um dispose no JFrame :!: :?:

:thumbup:

Olá InicianteJavaHenrique (acho que é isso, kk). Obrigado pelas orientaçães que você me deu. Logo depois que eu postei a minha dúvida aqui eu consegui resolver esse problema que ja tava me icomodando a um dia.

Eu fiz o seguinte. Quando eu instancio um novo objeto da classe de mensagem e o usuario clica no botao sim, um atributo static boolean x = true,

e na classe que foi instanciado o objeto logo em baixo da instancia e faço um if(Mensage.x == true){ faça isso }else{ faça aquilo }.

kkkk fiquei loco quando eu resolvi pq tinha acabado de postar minha duvida aqui! kkk

Mas mesmo assim muito obrigado.