Amigos,
Estou com o seguinte formulário declarado:
[code]package inicial;
import cadastros.CadastroUsuario;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Principal extends javax.swing.JFrame{
/** Creates new form Principal */
public Principal() {
initComponents();
}
public void HabilitarMenu(){
jMenuItem1.setEnabled(true);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jDesktopPane1 = new javax.swing.JDesktopPane();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jMenu1.setText("Cadastros");
jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, 0));
jMenuItem1.setText("Cadastro de Usuários");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText("Edit");
jMenuItem2.setText("jMenuItem2");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem2);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 700, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 522, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
//jMenuItem1.setEnabled(false);
CadastroUsuario cadastrousuario = CadastroUsuario.getInstance();
this.repaint();
jDesktopPane1.add(cadastrousuario);
cadastrousuario.setVisible(true);
jMenuItem1.setEnabled(false);
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
this.HabilitarMenu(); // TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Não foi possível carregar o \"Skin\" padrão. Definindo o padrão original.", "Erro",
JOptionPane.ERROR_MESSAGE);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
javax.swing.JFrame frame = new Principal();
frame.setVisible(true);
}
}
);
}
// Variables declaration - do not modify
private javax.swing.JDesktopPane jDesktopPane1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
// End of variables declaration
}[/code]
Então este é instanciado como frame.
O que eu quero saber é o seguinte como faço para executar um método desta classe a partir de uma outra?
Então nesta classe eu tenho o método HabilitarMenu()
public void HabilitarMenu(){
jMenuItem1.setEnabled(true);
}
Como eu faço para a partir de uma outra classe chamar este método e fazer o método habilitar a janela já aberta como frame?
Alguem pode me ajudar?
Att
Tiago Dantas
Para chamar esse método a partir de outra classe você pode usar:
Principal principal = new Principal();
principal.habilitarMenu();
Se você estiver chamando essa sua outra classe do seu JFrame Principal, você pode passar o JMenuItem como parâmetro para o seu método da outra classe. Mais ou menos assim:
import javax.swing.JMenuItem;
public class SuaOutraClasse {
/*
* Passe como parâmetro o seu JMenuIetm e chame o método
* desejado.
*/
public void habilitarMenu(JMenuItem menuItem) {
menuItem.setEnabled(true);
}
}
Entendeu?
dfsilva86 ,
Muito obrigado pela resposta.
Mas eu já havia feito desta forma.
E não setou true par o menu.
Coloquei um outro menu na mesma classe e quando chamo a função vai tudo certinho, mas quando chamo a função a partir de um outro objeto ai não vai.
Att
Tiago Dantas
Ricardo,
Muito obrigado por sua resposta.
Mas não entendi direito.
Vc poderia mastigar um pouco mais para mim!!!
Ser mega iniciante é complicado.
Grato
Tiago Dantas
Ricardo,
Agora entendi o que vc colocou.
O meu problema é o seguinte na verdade tenho de fazer o contrário.
Pois eu tenho de habilitar o JMenuItem que esta no primeiro formulário, no Principal a partir do segundo formulário que é o que foi chamado pelo Principal.
O que devo fazer nesta situação?
Att
Tiago Dantas
Beleza, vou tentar explicar melhor.
Eu estou presumindo que você está instânciando essa sua outra Classe dentro da classe Principal. Depois você está tentando chamar os método dessa classe instanciada e quer que esse método manipule o objeto JMenuItem.
Se for isso eu fiz um exemplo. Tenho uma classe extendida do JFrame que possui o menu igual ao seu e dois botões. Um botão ao ser clicado irá mostrar o menu e o outro botão ao ser clicado irá fazer o menu desaparecer.
Implementei uma classe chamada ControlaMenu. Essa classe possui dois métodos: mostrarMenu(JMenuItem menuItem) e sumirMenu(JMenuItem menuItem). Repare que esses dois métodos recebem como parâmetro um objeto JMenuItem.
Ao clicar no botão de sumir o menu, eu irei instanciar essa classe ControlaMenu e chamarei o método sumirMenu(). O botão que faz o menu aprecer também instanciará a classe ControlaMenu, só que chamará a método sumirMenu().
Fazendo isso o menu irá desaparecer e aparecer clicando nos botões. O que eu quero que você perceba é que estamos fazendo o menu aparecer e desaparecer a partir de outra classe. Não estamos fazendo isso da classe Principal. Sacou?
Abaixo está os códigos:
Principal.java
[code]/*
package teste;
/**
-
@author Ricardo
*/
public class Principal extends javax.swing.JFrame {
/** Creates new form Principal */
public Principal() {
initComponents();
}
/** This method is called from within the constructor to
-
initialize the form.
-
WARNING: Do NOT modify this code. The content of this method is
-
always regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
//
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText(“Sumir Menu”);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText(“Mostrar Menu”);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jMenu1.setText(“File”);
jMenuItem1.setText(“Menu Menu”);
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}//
/*
- Método que dispara o evento do botão de Sumir o Menu
*/
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ControlaMenu controla = new ControlaMenu();
controla.sumirMenu(this.jMenuItem1);
}
/*
- Método que dispara o evento do botão de Aparecer o Menu
*/
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
ControlaMenu controla = new ControlaMenu();
controla.mostrarMenu(this.jMenuItem1);
}
/**
-
@param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
// End of variables declaration
}
[/code]
ControlaMenu.java
package teste;
import javax.swing.JMenuItem;
/**
* @author Ricardo
*/
public class ControlaMenu {
public void mostrarMenu(JMenuItem menuItem) {
menuItem.setVisible(true);
}
public void sumirMenu(JMenuItem menuItem) {
menuItem.setVisible(false);
}
}
Sacou?
Se não entendeu, pergunta denovo que a gente vai tentando.
[quote=tmdantas]Ricardo,
Agora entendi o que vc colocou.
O meu problema é o seguinte na verdade tenho de fazer o contrário.
Pois eu tenho de habilitar o JMenuItem que esta no primeiro formulário, no Principal a partir do segundo formulário que é o que foi chamado pelo Principal.
O que devo fazer nesta situação?
Att
Tiago Dantas[/quote]
Eu respondi e não vi essa sua resposta. Porém o principio é o mesmo. Crie um método lá no outro formulário que receba como parâmetro o JMenuItem, e execute esse método. Há várias formas de você passar esse JMenuItem. Pode ser usando um public void setMenu(), ou passando pelo construtor.
Amigos,
Problema resolvido com a dica do Ricardo.
O que fiz foi o seguinte:
Coloquei no meu segundo formulário o seguinte:
[code]private JMenuItem teste;
public void habilitarMenu(JMenuItem menuItem) {
teste = menuItem;
}[/code]
Então no meu formulário principal fiz o seguinte:
Ao clicar no jMenuItem1:
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
//jMenuItem1.setEnabled(false);
CadastroUsuario cadastrousuario = new CadastroUsuario();
jDesktopPane1.add(cadastrousuario);
cadastrousuario.setVisible(true);
jMenuItem1.setEnabled(false);
cadastrousuario.habilitarMenu(jMenuItem1);
}
E desta forma o problema foi sanado.
Ficam aqui meus agradecimentos ao Ricardo.
Att
Tiago Dantas
Agora eu fiquei com a pulga atrás da orelha, pq ele não conseguiu habilitar o JMenuItem criando uma instância na outra classe? :shock: