Fechar tela Cliente sem fechar a Tela principal

Boa tarde a todos.

Estou começando a criar uma TELA PRINCIPAL , a qual é responsável por ter o MENU DE OPÇÕES. Através desta tela eu chamo as outras, conforme o código abaixo:

package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class MenuExemplo3 extends JFrame {
    private JMenuItem sair;
    private JMenuItem cliente, fornecedor, produto;
    private JMenuItem ajuda, info;
    private JMenu sistema, cadastro, sobre;
    private JMenuBar menuBar;
    
    public MenuExemplo3(){
        setSize(400, 400);
        setLocation(300, 200);
        //título da janela
        setTitle("Sistema Comercial");
        //construindo os objetos;
        sair = new JMenuItem("Sair");
        cliente = new JMenuItem("Cliente");
        fornecedor = new JMenuItem("Fornecedor");
        produto = new JMenuItem("Produto");
        ajuda = new JMenuItem("Ajuda");
        info = new JMenuItem("Info");
        sistema = new JMenu("Sistema");
        cadastro = new JMenu("cadastro");
        sobre = new JMenu("Sobre");
        
        //construindo o menu sistema
        sistema.add(sair);
        
                
        //construindo o menu cadastro
        cadastro.add(cliente);
        cadastro.add(fornecedor);
        cadastro.add(produto);
        
        //construindo o menu sobre
        sobre.add(ajuda);
        sobre.add(info);
        
        //construindo o menu
        menuBar = new JMenuBar();
        menuBar.add(sistema);
        menuBar.add(cadastro);
        menuBar.add(sobre);
        setJMenuBar(menuBar);
        
        //chama o método para definir os eventos.
        definirEventos();
        
        setVisible(true);
    }
    //define os eventos
    private void definirEventos(){ 
        //evento submenu sair
        sair.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent ae) {
                System.exit(0);
            }
        });
        
        //evento submenu cliente
        cliente.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent ae) {
                //instanciando tela cliente
                Cliente janelacli = new Cliente();
                janelacli.setVisible(true);
            }
        });
        
        //evento submenu sobre
        info.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent ae) {
                JOptionPane.showMessageDialog(null, "Sistema Comercial 1.0", "Informação",JOptionPane.INFORMATION_MESSAGE);
            }
        });
        
    }
    public static void main(String[] args){
        new MenuExemplo3();
    }
    
}
package gui;

import javax.swing.JFrame;

public class Cliente extends JFrame{
    
    //metodo construtor
    public Cliente(){
        
        //definindo o tamanho da janela
        setSize(400, 300);
        //título da janela
        setTitle("Cadastro de Clientes");
       //evento para fechar a janela
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //tornando a janela visivel
        setVisible(true);
    }
   
    
}

O problema que tenho aqui é o seguinte. Ao clicar no Menu Cadastro->Cliente, a Tela para cadastrar Cliente é mostrada, porém quando clico no Botão de Fechar da tela de cliente a TELA PRINCIPAL fecha também. Sendo assim, o que devo fazer para que quando eu clicar no Botão de Fechar da Tela de Cliente fechar apenas ela?

Obrigado.

Como você é iniciante, crie apenas um JFrame (a sua tela principal) e converta todos os outros JFrames do seu sistema em JDialogs.

Vai ver que você não vai ficar tendo esses problemas mais. Basta você passar o JFrame como parâmetro dos construtores dos seus JDialogs.

Problema resolvido através do seguinte texto abaixo:

Verifique a propriedade ‘DefaultClosingOperation’ do JFrame, ela deve estar como ‘EXIT_ON_CLOSE’. Isto que causa a saída do programa ao se fechar a janela. Altere-o para ‘DISPOSE_ON_CLOSE’ para que apenas a janela seja fechada. E para fechar um JFrame programaticamente, por exemplo em um listener de um botão ou um menu, você deve chamar jframe.setVisible(true), seguido de jframe.dispose().