Como fazer para um JMenuItem chamar um JFrame

Boa tarde,

Estou construindo uma aplicação Java e não consigo achar tópicos de como direcionar menus para JFrames.

O que ocorre é o seguinte:
Na aplicação, eu criei um JFrame em que coloquei um JMenuBar e, dentro deste, acrescentei vários JMenu.
Em cada JMenu, adicionei alguns JMenuItens, nos quais desejo chamar outros JFrame.
Por exemplo, ao clicar-se no JMenuItem Exposicoes, a aplicação deve abrir a página (no caso JFrame) Exposicoes.java .

Alguém poderia me ajudar, por favor?

Desde já, agradeço.

Usando o MouseListener():

private JMenuItem mItem;
.
.
.
mItem = new JMenuItem("Exposicoes");
mItem.addMouseListener(new MouseListener()
 {
        public void mousePressed(MouseEvent evt)
             {
                      new Exposicoes().setVisible( true );
              }
  });

Daniel,

Coloquei este código, porém o programa está dizendo que falta um identificador antes da variável mItem, na segunda e na terceira linha.
Poderia esclarecer?

Grato

Tu entendeste que que a primeira linha de código é o atributo de uma classe e que o restante d código tem de ficar em algum método, tipo o construtor, não é? Se sim, poste o código, se não, modifique e tente de novo, postanto o resultado aqui.

Ok, coloquei as linhas de instanciação do componente JMenuItem e de adição do método addMouseListener dentro do escopo do método construtor.
O problema foi resolvido, mas o erro agora consiste na execução do método mousePressed, devido ao fato da classe PrimeiraPagina não ser abstrata.
Segue abaixo o código:

public PrimeiraPagina(){
    mItem = new JMenuItem("Exposições");
    mItem.addMouseListener(new MouseListener (){
    
        public void mousePressed(MouseEvent evt){
            new Exposicoes().setVisible(true);
        }
    });
    
    }

Boa noite a todos.

Em primeiro lugar, com MenuItem, voce pode trabalhar um listener de Eventos ActionListener, que funciona como click do mouse.

Em segundo lugar, ao se criar um MenuItem voce deve acrescentá-lo ao JMenu, que porventura esteja acrescentado ao um JMenuBar.

Em terceiro lugar, um MenuItem que invoca um JFrame, tem que verificar sua sua instância não está nula, por que senão voce terá erro de “NullPointer”. Vamos ao possível código:

   public class PrimeiraPagina {

   // Declarando uma instância do Frame Exposições
   private Exposicoes expo = null;
   
   public PrimeiraPagina() {
       ......
       JMenuBar menubar = new JMenuBar();
       JMenu mnuframes = new JMenu("Abrir frames");
       JMenuItem mItem = new JMenuItem("Exposiçoes");  
       mItem.addActionListener(new ActionListener() {
             @Override  
             public void actionPerformed(ActionEvent evt) {  
                    if (expo == null) {
                       expo = new Exposicoes();
                       expo.setVisible(true);
                    } else if (expo.isVisible()) {
                       expo.setVisible(false);
                    } else {
                       expo.setVisible(true);
                    }     
             }  
       });
       mnuframes.add(mItem);
       menubar.add(mnuframes);
       ....
       setJMenuBar(menubar);
       ....
   }

   .....
}

Quando voce instancia um classe como se fosse classe anônima desta forma:

   ...
   new Exposicoes().setVisible(true);
   ...

Ao executar vários clicks no item de menu, voce corre o risco de criar várias instâncias de um mesmo formulário, e o que é pior, com instâncias anônimas, e isto não é uma boa prática de pool.

Um abraço.

eu faço da seguinte maneira: adiciono um actionperformed ao jmenuitem depois crio um objeto do jframe que quero abrir e crio um metodo tipo assim:

Objeto:

Metodo:

private void mostraExposicoes(){ if (exposicoes == null){ exposicoes = new Exposicoes(); exposicoes.setVisible(true); } else{ exposicoes.setVisible(true); exposicoes.setState(JFrame.NORMAL); } }

Evento

private void mnuExposicoesActionPerformed(java.awt.event.ActionEvent evt) { mostraExposicoes(); }

Bom dia pessoal!

Eu fiz da seguinte forma e funcionou!
Não sei exatamente se eh isso que vc quer saber!

private void JMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
formulario form = new formulario();
form.setVisible(true);
}

abraços!

[quote=rafaezandinha]eu faço da seguinte maneira: adiciono um actionperformed ao jmenuitem depois crio um objeto do jframe que quero abrir e crio um metodo tipo assim:

Objeto:

Metodo:

private void mostraExposicoes(){ if (exposicoes == null){ exposicoes = new Exposicoes(); exposicoes.setVisible(true); } else{ exposicoes.setVisible(true); exposicoes.setState(JFrame.NORMAL); } }

Evento

private void mnuExposicoesActionPerformed(java.awt.event.ActionEvent evt) { mostraExposicoes(); }[/quote]

Obrigado pela dica! usei em meu projeto e funcionou!, só uma coisa… Quando abria o jFrame via menu, realizava por exemplo um cadastro, voltava ao menu e abria o listar, os dados não estavam atualizados. Foi então que percebi que na parte do do código que vc forneceu era preciso remover o exposicoes.setVisible(true); que está abaixo de else{, pois o mesmo impedia que o frame fechasse e os dados não se atualizavam, ou seja, o código deveia ficar assim:

Objeto:

Metodo:

private void mostraExposicoes(){ if (exposicoes == null){ exposicoes = new Exposicoes(); exposicoes.setVisible(true); } else{ // exposicoes.setVisible(true); (Esse sai,,,) exposicoes.setState(JFrame.NORMAL); } }

Evento

private void mnuExposicoesActionPerformed(java.awt.event.ActionEvent evt) { mostraExposicoes(); }[/quote]

Muito obrigado! com um código muito simples vc ajudou muita gente!