Desabilitar toda a barra de menu da tela principal

Srs, boa noite.

   Tenho um programa com uma barra de menu com vários submenus, quando seleciono um submenu, a tela deste submenu(filha) abre dentro da tela de menu(pai).

   Gostaria que quando selecionasse qualquer submenu, ao abrir essa tela , o programa desativasse (setEnabled(false), toda a barra de menu, para que o usuario não abrisse outra tela de submenu, enquanto não saisse da tela que esta. 

Tentei o seguinte,ao clicar em um submenu, desabilito toda a barra de menu com o comando;

   private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
            // Pagina "Visnotas"
            jMenu4.setEnabled(false);
            jMenu2.setEnabled(false);
            jMenu8.setEnabled(false);
            jMenu9.setEnabled(false);
            FrmVisNotas Visnotas = new FrmVisNotas();
            Visnotas.setVisible(true);
            jDesktopPane1.add(Visnotas);
        }                             

Bom, este código esta funcionando bem, quando seleciono o submenu "FrmVisnotas", o programa desabilita toda a barra de menu e o usuario só pode escolher outro submenu, quando clicar no botão "sair" da pagina que esta.

    No botão Sair da pagina "FrmVisnota", coloquei o seguinte código;

       private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {                                        
            // Botão sair da tela FrmVisnotas
            jMenu4.setEnabled(true);
            jMenu2.setEnabled(true);
            jMenu8.setEnabled(true);
            jMenu9.setEnabled(true);
            this.dispose();
      }
Esta dando a seguinte mensagem ;
    Cannot find symbol
    symbol : variable jMenu4
    location : Class FrmVisnotas

 Tentei;
            " Formularios.FrmVisnotas.jMenu4.setEnabled(true); " 
                   Pois o nome do package é  Formularios;

 Tentei;   
           "FrmVisnotas.jMenu4.setEnabled(true);"   

Ambos deram erro com mensagem iguais a de cima, alguém pode me ajudar ? Muito agradecido

Armando.

Como você não implementou nenhum controlador para manipular suas telas, vai ter que fazer algo mais ou menos assim:

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // Pagina "Visnotas"
    habilitaMenus(false);
    FrmVisNotas visnotas = new FrmVisNotas();
    visnotas.addWindowListener(new WindowAdapter() {

        public void windowClosed(WindowEvent we) {
            habilitaMenus(true);
        }
    });
    visnotas.setVisible(true);
    jDesktopPane1.add(Visnotas);
}

private void habilitaMenus(boolean habilitar) {
    jMenu4.setEnabled(habilitar);
    jMenu2.setEnabled(habilitar);
    jMenu8.setEnabled(habilitar);
    jMenu9.setEnabled(habilitar);
}

Amigo staroski, primeiramente obrigado pelo pronto atendimento e ajuda.

Coloquei o codigo que vc me enviou;

Primeiro : na linha “public void windowClosed(WindowEvent we)” apareceu a luz amarela dizendo “Adicionar Anotação @Override” fiz conforme pedido “@Override”, mas apareceu um icon azul uma bolinha dentro de outra.

Segundo, cliquei no submenu FrmVisNotas, todos os subsmenus ficaram desabilitado (ok), mas a tela não abriu.

Terceiro, voltei ao código anterior, a tela voltou a abrir ou seja, ficou na mesmo.

Peço novamente a sua ajuda para resolver este problema,

Obrigado , Armando

Amigo, estou aqui tentando fazer alguma coisa para rodar o código, fiz o seguinte;

     // Pagina "Visnotas"
    habilitaMenus(false);
    FrmVisNotas visnotas = new FrmVisNotas();
    //visnotas.addWindowListener(new WindowAdapter() {

        //public void windowClosed(WindowEvent we) {
            //habilitaMenus(true);
        //}
    //});
    visnotas.setVisible(true);
    jDesktopPane1.add(visnotas);
}

Retirei estas duas linhas que estam como comentario, consegui abrir a tela FrmVisNotas e ao mesmo tempo, todos os submenus ficaram desabilitados.

Mas, mas, mas como sempre, sempre tem um mas, no botão “Sair” da tela FrmVisNota, tentei usar o comando abaixo e continua com erro.

private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {
// Botão sair
//jMenu4.setEnabled(true);
//jMenu2.setEnabled(true);
// jMenu8.setEnabled(true);
// jMenu9.setEnabled(true);
this.dispose();
}

Obrigado

Boa Tarde,

   Gostaria de comunicar e de ajudar a outra pessoa que tenha uma duvida como a
   minha, que consegui resolver o meu problema.

  Coloquei todos os menus como public e Static, como ? Simples, cliquei com o botão 
  direito sobre os menus (jMenu1, Jmenu2,JMenu3 ....), cliquei em personalizar
  código e abaixo coloquei os Menus como publec e Static.

 Quando clico em um menu qualquer, faço ;

     private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        //Click VisnotaBaixo
        jMenu2.setEnabled(false);
        jMenu4.setEnabled(false);
        jMenu8.setEnabled(false);
        jMenu9.setEnabled(false);
        jMenu10.setEnabled(false);
    } 

  Este codigo deixa todos os menus desabilitados.

 Ao sair da tela que chamei, no botão "Sair", fiz;

        jMenu2.setEnabled(true);
        jMenu4.setEnabled(true);
        jMenu8.setEnabled(true);
        jMenu9.setEnabled(true);
        jMenu10.setEnabled(true);
        this.dispose();

 Não esquecendo de importar os menus;

import static Formularios.FrmMenu.jMenu10;
import static Formularios.FrmMenu.jMenu2;
import static Formularios.FrmMenu.jMenu4;
import static Formularios.FrmMenu.jMenu8;
import static Formularios.FrmMenu.jMenu9;

Pronto, funcionou ! ! !

Obrigado. Armando

Os componentes de sua tela não deveriam ser public, muito menos static.
Você está usando estes modificadores incorretamente.

Você não havia dito que sua janela era um JInternalFrame.
No exemplo que postei, assumi que era um JFrame.

Com o JInternalFrame é só readaptar o código pra ser assim:

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
    habilitaMenus(false);
    FrmVisNotas visnotas = new FrmVisNotas();
    visnotas.addInternalFrameListener(new InternalFrameAdapter() {

        public void internalFrameClosed(InternalFrameEvent e) {
            habilitaMenus(true);
        }
    });
    visnotas.setVisible(true);
    jDesktopPane1.add(visnotas);
}

private void habilitaMenus(boolean habilitar) {
    jMenu4.setEnabled(habilitar);
    jMenu2.setEnabled(habilitar);
    jMenu8.setEnabled(habilitar);
    jMenu9.setEnabled(habilitar);
}

Tira o public e o static dos componentes da sua tela e arruma isso aí.
:wink:

Amigo, bom dia, Cada vez mais vejo a necessidade de fazer um curso sério e esquecer um pouco a internet, mas a situação que estamos passando, não deixa.

Fiz o que vc falou e coloquei o codigo no lugra do que eu havia feito, tirei o public e o static das telas, mas o novo código deu erro como eu mostro abaixo, mesmo depois que fiz as devidas importações pedidas.

Código;

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
//Abre FrmVisnotas
habilitaMenus(false);
FrmVisNotas visnotas = new FrmVisNotas();
visnotas.addInternalFrameListener(new InternalFrameAdapter() {

     public void internalFrameClosed(InternalFrameEvent e) { //manda adicionar
     //um Override, quando eu adiciono, aparece um icon verde de outra dizendo 
     //"substitui o metodo javax.event.InternalFrameAdapter"
           habilitaMenus(true);
     }
 });
   visnotas.setVisible(true);
   jDesktopPane1.add(visnotas); //da a seguinte mensagem de erro
   // Cannot find symbol
   // Symbol : variable jDesktopPane1
  // Location :Class FrmMenu

}

private void habilitaMenus(boolean habilitar) {
jMenu4.setEnabled(habilitar); //Mensagem de erro
// Cannot find Symbol : variable jMenu4
// Locatiom: class FrmMenu
}
Obrigado

Pelo tipo de suas dúvidas, vejo que está pulando etapas.
Está tentando desenhar telinhas sem conhecer programação orientada à objetos nem lógica de programação.
Aí vai ser difícil absorver conhecimento.

Tranquilo, o @Override é opcional.
O javax.event é o pacote onde está a classe InternalFrameAdapter.

Então você modificou seu fonte, a variável do seu JDesktopPane não se chama mais jDesktopPane1? Ou você removeu ela?

Provavelmente você também renomeou ou removeu a variável jMenu4.

Posta seu código fonte atualizado, pois evidentemente está diferente do que na sua primeira postagem. :wink:

Amigo Staroski, Boa tarde e a paz do nosso senhor, concordo contigo em tudo que vc falou, vc tem toda a razão, fiz um curso de Visual studio 2015, claro, terminei o curso e não sabia quase nada de programação, mas, os musicos da igreja que frequento e pela qual sou operador de audio, ao saberem que um dia fiz um curso de programação, me pediram para eu fazer um programa completo e complexo sobre instrumetos para ajudar os musicos na hora do culto.

Notei que a linguagem Visual Studio, não tinha recursos para a execução do programa, resolvi ver na internet qual a linguagem mais apropriada para isso, fui copiando alguns código e com a ajuda de vários instrutores do Guj e de um em especial, o programa foi saindo, depois de muitos pedidos dos musicos da igreja, aumentando e ficando mais dificil de programar, hoje falta muito pouco para ficar pronto, e posso afirmar, mesmo com muitos erros de código, logica, é um dos melhores programas para quem quer aprender a tocar Teclado, Violão, Baixo e Bateria, modesta parte, arranho um pouco cada um destes instrumentos, por iesta tão bem feito, juntou o meu pouco conhecimento sobre musica e alguns intrumento com o meu tquase que total desconhecimento sobre java, mas até que com muita ajuda, saiu.

O programa mostrar as posições das notas dos instrumentos numa lista de muitasssssss notas musicais, mostrar videos de musicas nos instrumentos, video aulas dos instrumentos, Teoria dos instrumentos em Pdf, Txt e muito maisssssss, só de “Menus principais” são 6 e vários “subMenus” .

Hoje eu posso dizer que uma pessoa leiga, pode aprender estes 4 instrumentos pelo programa, sem professor, os musicos da igreja, todos, guitarristas, bateristas, tecladistas, baixista, elogiaram bastante e acharam muito profissional o conteudo, ainda bem que eles não viram o código e não entendem de programação. Amém, !

Mas quero deixar claro que sem a ajuda de vcs do Guj , eu não conseguiria. Comecei na programação java errado, comecei programando, para depois tentar aprender algo, tenho muita dificuldade para aprender POO, tenho certeza que só irei aprender com um professor do lado, para mim, esta sendo muito dificil entender, já li alguns arquivos , entendi a teoria, mas não sei aplicar no código…

Gostaria muito de aprende Java ou C ou C++, mas só posso fazer isso, quando esta pandemia acabar, enquanto isso vou tentando terminar este programa e só voltar a fazer outro quando eu estudar uma linguagem a sério.

Voltando ao programa, vou ver esses erros que vc citou com calma, mas posso adiantar que o JMenu4, eu não alterei, ele continua lá com este nome, tanto é verdade que usando o código errado, ele como public e static, funciona e não da erro na variavel.

Sobre o JDeskTopPane1, posso dizer a mesma coisa sobre o JMenu, ele continua lá, no código errado, ele não da erro.

Sobre o “@Override é opcional”
“O javax.event é o pacote onde está a classe `InternalFrameAdapter”

Eu só queria entender porque ele da uma mensagem de;
“substitui o metodo javax.event.InternalFrameAdapter”

Amigo, mais uma vez, obrigado pela ajuda, concordo em tudo, mas agora tenho que terminar esse programa, senão o pessoal da igrja me mata e eu não quero morrer, apesar dos meu 65 anos, quero ainda aprender Java e jogar muita bola com meu netinho que esta a caminho.

Fique com Deus e que Ele continue te orientando para vc ajudar a quem precisa.

Armando.

Ufa !!! escrevi muito, até eu fiquei com preguiça para ler, desculpa.

Armando.

Provavelmente é a tradução mal feita do ambiente que você usa.
O correto seria ele dizer que você está sobrescrevendo o método e não substituindo.