Utilizando uma opção do JMenu para fechar o sistema!

Boa tarde pessoal, após procurar muito continuo com essa dúvida: tenho um JMenuBar e nele um JMenu “Sair” como faço quando ao clicar em Sair a tela inicial do meu sistema finaliza?

[code]

package Interface;

import Cadastros.Cadastro;
import Cadastros.CadastroCidade;
import Cadastros.CadastroEstado;
import java.awt.event.;
import javax.swing.
;

public class JanelaInicial extends JFrame implements ActionListener {

public JMenuBar jmb = new JMenuBar();
public JMenu jmCadastros = new JMenu ("Cadastros");
public JMenu jmMovimentos = new JMenu ("Movimentos");
public JMenu jmFinanceiro = new JMenu ("Financeiro");
public JMenu jmRelatorio = new JMenu ("Relatório");
public JMenu jmSair = new JMenu ("Sair");

public JMenuItem jmCompra = new JMenu ("Compra");
public JMenuItem jmDevolucao = new JMenu ("Devolução");

public JMenuItem jmiEstado = new JMenuItem ("Estado");
public JMenuItem jmiCidade = new JMenuItem ("Cidade");
public JMenuItem jmiCliente = new JMenuItem ("Cliente");
public JMenuItem jmiProduto = new JMenuItem ("Produto");
public JMenuItem jmiFornecedor = new JMenuItem ("Fornecedor");
public JMenuItem jmiFuncionario = new JMenuItem ("Funcionário");

public JMenuItem jmiVenda = new JMenuItem ("Venda");
public JMenuItem jmiEntradaCompra = new JMenuItem ("Entrada de Compra");
public JMenuItem jmiPedidoCompra = new JMenuItem ("Pedido de Compra");
public JMenuItem jmiEntradaDevolucaoCliente = new JMenuItem ("Entrada Devolução Cliente");
public JMenuItem jmiSaidaDevolucaoCliente = new JMenuItem ("Saída Devolução Cliente");
public JMenuItem jmiEntradaDevolucaoFornecedor = new JMenuItem ("Entrada Devolução Fornecedor");
public JMenuItem jmiSaidaDevolucaoFornecedor = new JMenuItem ("Saída Devolução Fornecedor");

public static JDesktopPane jdp = new JDesktopPane();

public static CadastroEstado cadastroEstado;
public static CadastroCidade cadastroCidade;


public JanelaInicial() {
    getContentPane().add(jdp);
    setTitle ("SCAF Versão 1.0");
    setJMenuBar (jmb);

    jmb.add (jmCadastros);
    jmb.add (jmMovimentos);
    jmb.add (jmFinanceiro);
    jmb.add (jmRelatorio);
    jmb.add (jmSair);
    
    jmCadastros.add (jmiEstado);
    jmCadastros.add (jmiCidade);
    jmCadastros.add (jmiCliente);
    jmCadastros.add (jmiFornecedor);
    jmCadastros.add (jmiFuncionario);
    jmCadastros.add (jmiProduto);

    jmMovimentos.add (jmCompra);
    jmCompra.add (jmiEntradaCompra);
    jmCompra.add (jmiPedidoCompra);

    jmMovimentos.add (jmDevolucao);
    jmDevolucao.add (jmiEntradaDevolucaoCliente);
    jmDevolucao.add (jmiSaidaDevolucaoCliente);
    jmDevolucao.add (jmiEntradaDevolucaoFornecedor);
    jmDevolucao.add (jmiSaidaDevolucaoFornecedor);

    jmMovimentos.add (jmiVenda);
    
    
    jmiEstado.addActionListener(this);
    jmiCidade.addActionListener(this);
    jmiCliente.addActionListener(this);
    jmiProduto.addActionListener(this);
    jmiFornecedor.addActionListener(this);
    jmiFuncionario.addActionListener(this);

    jmCompra.addActionListener(this);
    

    setVisible(true);
    setDefaultCloseOperation (EXIT_ON_CLOSE);
    setExtendedState (MAXIMIZED_BOTH);
}

}

desde já agradeço!
Valew

Olá amigo, carlos

Tenta o seguinte:

public JMenu jmSair = new JMenu ("Sair"); 

public JanelaInicial() {

//atributo menu item que vc criou
jmSair.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
				
			}
			
		});

}

Você precisa adicionar um listener que tem um método encarregado de executar um evento (“Ex.: clicar no menu”) para esse menu da mesma forma que fazemos com botôes no Swing.
Espero ter ajudado
Fallow Abraço

package Interface;

import Cadastros.Cadastro;
import Cadastros.CadastroCidade;
import Cadastros.CadastroEstado;
import java.awt.event.*;
import javax.swing.*;

public class JanelaInicial extends JFrame implements ActionListener {

    public JMenuBar jmb = new JMenuBar();
    public JMenu jmCadastros = new JMenu ("Cadastros");
    public JMenu jmMovimentos = new JMenu ("Movimentos");
    public JMenu jmFinanceiro = new JMenu ("Financeiro");
    public JMenu jmRelatorio = new JMenu ("Relatório");
    public JMenu jmSair = new JMenu ("Sair");

    public JMenuItem jmCompra = new JMenu ("Compra");
    public JMenuItem jmDevolucao = new JMenu ("Devolução");

    public JMenuItem jmiEstado = new JMenuItem ("Estado");
    public JMenuItem jmiCidade = new JMenuItem ("Cidade");
    public JMenuItem jmiCliente = new JMenuItem ("Cliente");
    public JMenuItem jmiProduto = new JMenuItem ("Produto");
    public JMenuItem jmiFornecedor = new JMenuItem ("Fornecedor");
    public JMenuItem jmiFuncionario = new JMenuItem ("Funcionário");

    public JMenuItem jmiVenda = new JMenuItem ("Venda");
    public JMenuItem jmiEntradaCompra = new JMenuItem ("Entrada de Compra");
    public JMenuItem jmiPedidoCompra = new JMenuItem ("Pedido de Compra");
    public JMenuItem jmiEntradaDevolucaoCliente = new JMenuItem ("Entrada Devolução Cliente");
    public JMenuItem jmiSaidaDevolucaoCliente = new JMenuItem ("Saída Devolução Cliente");
    public JMenuItem jmiEntradaDevolucaoFornecedor = new JMenuItem ("Entrada Devolução Fornecedor");
    public JMenuItem jmiSaidaDevolucaoFornecedor = new JMenuItem ("Saída Devolução Fornecedor");

    public static JDesktopPane jdp = new JDesktopPane();

    
    public static CadastroEstado cadastroEstado;
    public static CadastroCidade cadastroCidade;


    public JanelaInicial() {
        getContentPane().add(jdp);
        setTitle ("SCAF Versão 1.0");
        setJMenuBar (jmb);

        jmb.add (jmCadastros);
        jmb.add (jmMovimentos);
        jmb.add (jmFinanceiro);
        jmb.add (jmRelatorio);
        jmb.add (jmSair);
        
        jmCadastros.add (jmiEstado);
        jmCadastros.add (jmiCidade);
        jmCadastros.add (jmiCliente);
        jmCadastros.add (jmiFornecedor);
        jmCadastros.add (jmiFuncionario);
        jmCadastros.add (jmiProduto);

        jmMovimentos.add (jmCompra);
        jmCompra.add (jmiEntradaCompra);
        jmCompra.add (jmiPedidoCompra);

        jmMovimentos.add (jmDevolucao);
        jmDevolucao.add (jmiEntradaDevolucaoCliente);
        jmDevolucao.add (jmiSaidaDevolucaoCliente);
        jmDevolucao.add (jmiEntradaDevolucaoFornecedor);
        jmDevolucao.add (jmiSaidaDevolucaoFornecedor);

        jmMovimentos.add (jmiVenda);

        jmSair.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.exit(0);
            }
        });
        
        
        jmiEstado.addActionListener(this);
        jmiCidade.addActionListener(this);
        jmiCliente.addActionListener(this);
        jmiProduto.addActionListener(this);
        jmiFornecedor.addActionListener(this);
        jmiFuncionario.addActionListener(this);

        jmCompra.addActionListener(this);

        setVisible(true);
        setDefaultCloseOperation (EXIT_ON_CLOSE);
        setExtendedState (MAXIMIZED_BOTH);
    }

    public void actionPerformed (ActionEvent e) {
        if (e.getSource() == jmiEstado) {
            if (cadastroEstado == null) {
            cadastroEstado = new CadastroEstado();
            jdp.add(cadastroEstado);
        }
            jdp.moveToFront(cadastroEstado);
        }

   }

    public static void fechaTela(Cadastro tela) {
        
        if (tela instanceof CadastroEstado) {
            jdp.remove(cadastroEstado);
            cadastroEstado = null;
        }

      
    }
}

Seu Frame ja implementa ActionListener, entao faça o seguinte:


        jmSair.addActionListener(this);


     //e no método 
     public void actionPerformed (ActionEvent e) { 
         if(e.getSource()==jmSair){         
              System.exit(0);

         }else if (e.getSource() == jmiEstado) {  
             if (cadastroEstado == null) {  
             cadastroEstado = new CadastroEstado();  
             jdp.add(cadastroEstado);  
         }  
             jdp.moveToFront(cadastroEstado);  
         }  
  
    } 

Teste e nos dê um retorno OK!
Fallow Abraço

Sem ação ainda, não fecha.

Oi Carlos, entao cara a principio não tem segredo.

O que a gente poderia fazer agora é simplesmente debugar pra ver se a chamada esta entrando na linha do método ActionPerformed

Vc está usando o netBeans ou eclipse?

se for no eclipse é soh vc dar CTRL + F11 na sua classe main do projeto, no NetBeans eu não lembro como que roda em debug mas nao é dificil acho que tem um menu “run debug”…

coloque 2 break points, 1 na linha do system.exit(0) e outro na linha do primeiro if do ActionPerfomed

rode o programa e clique no menu sair…

Assim saberemos se ao clicar no menu o evento esta sendo disparado OK, pois o compilador vai parar na linha marcada com o brek point OK!

Poste o resultado

jmSair, não deveria ser um JMenuItem???

Putz!!

Muito bem lembrado e Observado pelo colega fredferrao!!

Faça o seguinte:


    public JMenuItem jmiSair = new JMenuItem ("Sair");  
...
     public JMenuBar jmb = new JMenuBar();  
     public JMenu jmCadastros = new JMenu ("Cadastros");  
     public JMenu jmMovimentos = new JMenu ("Movimentos");  
     public JMenu jmFinanceiro = new JMenu ("Financeiro");  
     public JMenu jmRelatorio = new JMenu ("Relatório");  
     public JMenu jmSistema = new JMenu ("Sistema"); 

...

        jmSistema.add (jmiSair);  
   
         jmiSair.addActionListener(this); 

//no actionPerfomred altere o jmSair por jmiSair

agora vai !!!

Poste o resultado

Muito bem, agora sim!

Obrigado a todos, e valew pela atenção Paulo!

Abraço!

É isso ae Carlos, blz…

Fallow
Abração

Mas e como se captura o evento do clique no Jmenu, sem que seja necessário adicionar um JMenuItem?

Para aqueles que se interessarem ai vai a maneira como se captura o clique no JMenu. Esse exemplo poderia resolver o problema do Carlos Alexandre sem a necessidade de se adicionar o JMenuItem.

[code]
JMenu menu = new JMenu(“Menu”);
menu.addMenuListener(
new MenuListener() {
public void menuSelected(MenuEvent e) {
System.out.println(“TESTE”);
}

                public void menuDeselected(MenuEvent e) {}  
                public void menuCanceled(MenuEvent e) {}  
            }  
    );  [/code]

Uma dúvida. Porque o evento só funciona no JMenuItem e não no JMenu?

VEJAM O SEGUINTE : Meu velho veja bem eu estou tentado realizar a multiplicação entre duas matrizes 9x9: matrizMK e a matrizK.inverse().
Contudo a palavra fica com sublinhado vermelho(erro), e a mensagem quando compila é a seguinte: Exception in thread ?main? java.lang.RuntimeException: Uncompilable source code ? Erroneous sym type: Array.inverse.

Como faço para multiplicar a matrizMK com a Inversa da matrizK???
O CÓDIGO:

public static void main(String[] args) {

double[][] matrizMK = {{65,57,36,20,77,155,35,83,165},{90,10,15,76,25,107,13,47,193},{57,36,3,0,101,85,7,121,139},
{27,54,66,18,46,25,62,131,41},{68,47,33,48,6,131,126,24,162},{62,41,99,70,79,105,3,86,137},{14,77,60,76,6,138,98,126,13},
{25,73,78,50,54,113,40,143,41},{9,2,36,0,11,0,0,0,18}};

double [][] matrizK = {{1,0,0,0,0,0,0,0,2},{0,2,3,0,0,0,0,0,0},{0,0,3,0,1,0,0,0,0},{0,0,0,4,0,5,0,0,0},
{0,0,0,0,5,0,0,6,0},{0,3,0,0,0,6,0,0,1},{0,0,0,0,0,0,7,1,0},{1,0,0,2,0,0,3,8,0},{4,0,0,0,0,1,0,0,9}};

//int aux = 0;

System.out.println(?MATRIZ Recebida:?);
Matrix matriz=new Matrix(matrizMK);
matriz.print(5,0);

System.out.println(?MATRIZ chave publica?);
Matrix chave= new Matrix(matrizK);
chave.print(5,0);

System.out.println(?MATRIZ INVERSA da chave pública?);
Matrix inversa= new Matrix(matrizK).inverse();
inversa.print(5,0);

// PRODUTO DAS MATRIZES MK E MatrizK.inverse()

int row, column, i;
double aux;
double c[][] = new double[matrizMK.length][matrizK.inverse()[0].length];
for (row = 0; row < c.length; row++) // multiplicação das matrizes
{

for (column = 0; column < c[row].length; column++) {
aux = 0;
for (i = 0; i < matrizMK[row].length; i++) {
try {
aux = aux + matrizMK[row][i] * matrizK.inverse()[i][column];
} catch (Exception e) {
e.printStackTrace();
}
} c[row][column] = aux;
}
}
// define matriz produto
Matrix matrizProduto = new Matrix©;
System.out.println(“Produtoatriz MK com a matriz Inversa”);
matrizProduto.print(5,0);
}

}

Galera gostaria que alguém pudesse me responder o mais breve possível. Agradeço

@theophilo, por quê não abriu um tópico para sua dúvida em vez de entubar 10 mensagens em tópicos antigos e sem relação com sua dúvida?

http://www.guj.com.br/posts/listByUser/168432.java