Jmenu

Como faço para, quando eu clicar em um pop up do menu, e abrir o meu Jinternalframe ele ficar cinza, ou seja nao poder ser clicado,
e depois que eu fechar o meu jinternalframe ele ativar, sei que posso utilizar o JMenu1.setEnabled(false); para desativa-lo, so que nao consigo
reativalo, utilizando o evento de fechamento do jinternalframe e nem o de closeOperation, para que eu possa setar JMenu1.setEnabled(true);

Como posso fazer?

Nunca vi alguém desabilitar um JPopupMenu. A ação esperada, quando você escolhe algo em um JPopupMenu, é simplesmente fechá-lo e executar a opção escolhida.

Então, que no meu caso eu necessito que fique bloqueado para que ele so consiga abrir outro JinternalFrame depois que ele fechar a janela aberta.

Ah, não é um JPopupMenu. Você quer simplesmente desabilitar um item do menu. Vamos ver. Tem alguma coisa que você deve estar fazendo de errado, porque o que você quis fazer é o que normalmente seria feito. Vamos ver se dá para fazer um exemplo simples.

Então, eu estou fazendo o seguinte :

Metodo que ativa e desativa meu menu


     public void habilitarMenu(){
         jMenu1.setEnabled(verdadeiro);
     }
     public void desabilitarMenu(){
         jMenu1.setEnabled(falso);
     }

E quando eu clico no meu menu e escolho o cadastro que eu quero, ao iniciar a janela, eu seto desabilitarMenu, e eu queria saber como jogar o habilitarMenu quando eu fechar
o JinternalFrame eu jogar o metodo habilitarMenu, estou tentando instanciar a janela que contem o menu e passa pra ela o seguinte :


    private void formInternalFrameClosed(javax.swing.event.InternalFrameEvent evt) {                                         
        // TODO add your handling code here:
        principal.habilitarMenu();

Dê uma olhadinha neste código. Ele desabilita a opção “Nova Janela” quando a JInternalFrame que você abriu for aberta, e reabilita essa opção quando a JInternalFrame for fechada.

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;

public class ExemploSimplesJDesktopPane extends JFrame {
    private JMenuBar menuBar;
    private JMenu mnJanela;
    private JMenuItem mntmNovaJanela;
    private JDesktopPane desktopPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploSimplesJDesktopPane frame = new ExemploSimplesJDesktopPane();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploSimplesJDesktopPane() {
        setTitle("Exemplo JInternalFrame");
        setBounds(100, 100, 600, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setJMenuBar(getMenuBar_1());
        getContentPane().add(getDesktopPane(), BorderLayout.CENTER);

    }

    private JMenuBar getMenuBar_1() {
        if (menuBar == null) {
            menuBar = new JMenuBar();
            menuBar.add(getMnJanela());
        }
        return menuBar;
    }

    private JMenu getMnJanela() {
        if (mnJanela == null) {
            mnJanela = new JMenu("Janela");
            mnJanela.add(getMntmNovaJanela());
        }
        return mnJanela;
    }

    private JMenuItem getMntmNovaJanela() {
        if (mntmNovaJanela == null) {
            mntmNovaJanela = new JMenuItem("Nova Janela...");
            mntmNovaJanela.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    mntmNovaJanela.setEnabled(false);
                    JInternalFrame jif = new ExemploSimplesJInternalFrame();
                    jif.setClosable(true);
                    desktopPane.add(jif);
                    jif.addInternalFrameListener(new InternalFrameAdapter() {
                        @Override
                        public void internalFrameClosed(InternalFrameEvent e) {
                            super.internalFrameClosed(e);
                            mntmNovaJanela.setEnabled(true);
                        }
                    });
                    jif.setVisible(true);
                }
            });
        }
        return mntmNovaJanela;
    }

    private JDesktopPane getDesktopPane() {
        if (desktopPane == null) {
            desktopPane = new JDesktopPane();
        }
        return desktopPane;
    }
}
package guj;

import java.awt.EventQueue;

import javax.swing.JInternalFrame;

public class ExemploSimplesJInternalFrame extends JInternalFrame {

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploSimplesJInternalFrame frame = new ExemploSimplesJInternalFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploSimplesJInternalFrame() {
        setTitle("Teste");
        setBounds(100, 100, 450, 300);

    }

}

Aliás, qual seu problema com as constantes “true” e “false”? Esquisito em um código Java usar “verdadeiro” e “falso”. Se é para programar em português, reserve isso para outros identificadores, ou então radicalize e use a linguagem Lua (que foi inventada aqui no Brasil por um pesquisador da UFRJ).