Menu dificil

Tenho o código abaixo que constroi um form com um menu chamado SAIR quero que quando o usuário clicar em SAIR, o form seja fechado e a aplicação encerrada um colega me passou a dica abixo mas deu erro.

D:\JavaProject\Siscom\Siscom\src\Siscom\Siscom.java:62: expected
MSair.addActionListener(menu);

/*
 * Siscom.java
 *
 * Created on 7 de Março de 2005, 14:06
 */

package Siscom;

/**
 *
 * @author  gilberto
 */

import java.awt.event.*;
public class Siscom extends javax.swing.JFrame {
    
    /** Creates new form Siscom */
    public Siscom() {
        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.
     */
    private void initComponents() {
        mainMenu = new javax.swing.JMenuBar();
        MSair = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SISCOM - Sistema de gest\u00e3o comercial");
        setName("frmSiscom");
        MSair.setMnemonic('S');
        MSair.setLabel("Sair");
        mainMenu.add(MSair);

        setJMenuBar(mainMenu);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-600)/2, (screenSize.height-400)/2, 600, 400);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Siscom().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JMenu MSair;
    private javax.swing.JMenuBar mainMenu;
    // End of variables declaration
    
    // Criando gerenciadores de eventos para o menu
    evtMenu menu = new evtMenu(); // Eventos do menu principal
    MSair.addActionListener(menu);
    
    // Classe interna para eventos do menu
    private class evtMenu implements ActionListener{
        private String value;
        public void actionPerformed(ActionEvent evt){
            if(evt.getSource() == MSair){
                System.exit(0);
            }
        }
    }
}

NetBeans 4.1EA2
Java 5.0

Valeu.

Nesta linha:

     MSair = new javax.swing.JMenu();

Você deve fazer assim:

     javax.swing.JMenu MSair = new javax.swing.JMenu();

Mude para:

public void actionPerformed(ActionEvent evt){ System.exit(0); }

Daniel;

Como estou trabalhando com NetBeans, ele não deixa alterar o código que você indicou pois foi gerado por ele.

Valeu.

Oops, eu ví que ele tem um atributo privado para MSair. Então desconsidere isso.

Qual erro que dá? Na compilação ou execução?

Daniel;

Um colega pediu pra muda o código para a seção abaixo e o erro que era na compilação parou mas o menu SAIR não funciona.

public Siscom() {
initComponents();
// Criando gerenciadores de eventos para menu
evtMenu menu = new evtMenu(); // Eventos do menu principal
MSair.addActionListener(menu);
}

Valeu.

Na verdade você deixou de criar um JMenuItem e adicioná-lo ao JMenu. Eu alterei o código. Teste aí:

[code]import java.awt.event.*;

public class Siscom extends javax.swing.JFrame {

 /** Creates new form Siscom */
 public Siscom() {
     initComponents2();
     // Criando gerenciadores de eventos para o menu
     evtMenu menu = new evtMenu();
     mnuSair.addActionListener(menu);
 }

 /** 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.
  */
 private void initComponents2() {
     mainMenu = new javax.swing.JMenuBar();
     MSair = new javax.swing.JMenu();
     mnuSair = new javax.swing.JMenuItem();
     mnuSair.setText("Exit");
     MSair.add( mnuSair );

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     setTitle("SISCOM - Sistema de gest\u00e3o comercial");
     setName("frmSiscom");
     MSair.setMnemonic('S');
     MSair.setLabel("Sair");
     mainMenu.add(MSair);

     setJMenuBar(mainMenu);

     java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
     setBounds((screenSize.width-600)/2, (screenSize.height-400)/2, 600, 400);
 }

 /**
  * @param args the command line arguments
  */
 public static void main(String args[]) {
     java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
             new Siscom().setVisible(true);
         }
     });
 }

 // Variables declaration - do not modify
 private javax.swing.JMenu MSair;
 private javax.swing.JMenuItem mnuSair;
 private javax.swing.JMenuBar mainMenu;
 // End of variables declaration


 // Classe interna para eventos do menu
 private class evtMenu implements ActionListener {
     private String value;
     public void actionPerformed(ActionEvent evt) {
         if(evt.getSource() == mnuSair) {
             System.exit(0);
         }
     }
 }

}[/code]

Daniel;

Aquestão é a seginte: Dessa forma, será criado um item dentro do menu SAIR chamado EXIT certo ? pois é isso que eu não quero gostaria de term somente o menu SAIR clicar nele e finalizar a aplicação.

Valeu.

Então lê aqui:

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JMenu.html
http://java.sun.com/j2se/1.4.2/docs/api/index.html

OK pelo que lí… Moral da estória não tem como fazer ? Tenho que ter um Item dentro do menu Sair.

Valeu.

Faltou ler direito! :twisted:

[quote]addMenuListener

public void addMenuListener(MenuListener l)

Adds a listener for menu events.

Parameters:
    l - the listener to be added

[/quote]