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