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).