Dúvida sobre Janela

Estou com uma dúvida sobre a abertura de janelas.

Geralmente eu crio uma classe com o código da janela e depois na classe main por exemplo, digito o código de exibição dessa janela:

Janela obj = new Janela(); obj.setVisible(true);

Agora estou fazendo um exercício aki que eu tenho uma janela principal e e vários botões e quando clico
em um determinado botão, abre uma nova janela com a função do botão.

O que eu gostaria de saber é se tem como, quando eu clicar em um botão, a nova janela abrir na mesma na qual eu estou
e quando clicar em sair por exemplo, volte a janela antiga com os botões.

Bom se puderem me ajudar.
Grato

Ps… Qualquer dúvida sobre a minha pergunta, postem Ok.

Bem, não sei se é a melhor forma, mas você poderia fechar a janela principal ao abrir a segunda janela. E quando você clicar no botão sair, você chama a janela principal novamente.

A propósito, se puderem me explicar

o que o comando

Faz com a jenela?

E mais uma coisa, por exemplo, quando eu abro uma janela a partir de outra e as duas estão abertas, e
na nova janela aberta, tem um botão sair, qual o comando que tenho que usar para sair somente da segunda janela
e a outra continuar aberta, pois usando o comando acima eu não consegui não.!

Boa noite,

t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Neste caso você está definindo a ação padrão ao fechar a janela. Ao clicar no “x” no canto superior direito é esta ação que será executada. De acordo com o código, ação será sair do sistema, ao fechar a janela.

Quanto as janelas que abrem através dos menus/botões. Trabalho com JDialog, não é a unica maneira, mas atende perfeitamente.

[]s

Grato por responder,

poderia dar um exemplo de JDialog?

Claro, vamos lá:

Frame:

import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.WindowConstants;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class FramePrincipal extends JFrame {

    public FramePrincipal() {
    	super("Tela Principal");
    	
    	//Cria objeto para ser passado como paramentro para o setSize()
    	Dimension dimensao = new Dimension(800, 600);
    	//Configura o tamanho da tela.
    	this.setSize(dimensao);
    	
    	//Configura o comportamento ao ser fechada a tela.
    	this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    	
    	//Cria o botão.
    	JButton botao = new JButton("JDialog");
    	
    	//Cria a ação que será usada no botão.
    	ActionListener acao = new ActionListener() {
    		public void actionPerformed(ActionEvent e) {
    			//Cria o dialog.
    			DialogExemplo dialog = new DialogExemplo();
    			//Ajusta a posição para exibição da tela, tendo como referencia, o proprio frame.
    			dialog.setLocationRelativeTo(FramePrincipal.this);
    			//Exibe o dialog.
    			dialog.setVisible(true);
    		}
    	};
    	
    	// Adiciona, a ação no botão.
    	botao.addActionListener(acao);
    	
    	//Adiciona o botão no frame.
    	this.add(botao);
    }
    
    //Executa a tela para ser exibida.
    public static void main(String args[]) {
    	FramePrincipal frame = new FramePrincipal();
    	frame.setVisible(true);
    }
    
    
}

Dialog:

import javax.swing.JDialog;
import java.awt.Dimension;
import javax.swing.WindowConstants;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DialogExemplo extends JDialog {

    public DialogExemplo() {
    	super();
    	
    	this.setTitle("Dialog de teste!");
    	
    	Dimension dimensao = new Dimension(240, 160);
    	this.setSize(dimensao);
    	
    	//Ajusta o comportamento padrão da tela para ser abandonada.  Assim o frame ainda fica em execução, e o dialog apenas é destruido.
    	this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    	//Configura o dialog como modal, neste caso, o frame não pode ser acessado sem fechar o dialog.
    	this.setModal(true);
    	
    	JButton botao = new JButton("Fechar");
    	
    	ActionListener acao = new ActionListener() {
    		public void actionPerformed(ActionEvent e) {
    			DialogExemplo.this.dispose();
    		}
    	};
    	
    	botao.addActionListener(acao);
    	
    	this.add(botao);
    }
    
    
}

[]s