Como instanciar este objeto?

9 respostas
T

Amigos,

Estou com o seguinte formulário declarado:

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
}

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

9 Respostas

dfsilva86

Para chamar esse método a partir de outra classe você pode usar:

Principal principal = new Principal(); principal.habilitarMenu();

R

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?

T

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

T

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

T

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

R

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
/*
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")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    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();
    }// </editor-fold>

    /*
    * 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
}
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.

R

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

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.

T

Amigos,

Problema resolvido com a dica do Ricardo.

O que fiz foi o seguinte:

Coloquei no meu segundo formulário o seguinte:

private JMenuItem teste;

    public void habilitarMenu(JMenuItem menuItem) {
        teste = menuItem;
    }

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

dfsilva86

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:

Criado 31 de março de 2009
Ultima resposta 31 de mar. de 2009
Respostas 9
Participantes 3