Porque os JMenuItem não funcionaram?

10 respostas
E

oi pessoal, to com um probleminha, não consigo entender o porque dos items de menu não estão funcionando, coloquei os System.exit(0) só para testar, mas não teve jeito…

Ewerson Silva

10 Respostas

L

Pelo que ja implementei somente os JMenuItem podem gerar ação.

E

Da uma olhadinha no código

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CNumerico extends JFrame{ 
    Container c=getContentPane(); 
    JMenuBar jmbPrincipal; 
    JMenu jmCadastro; 
    JMenuItem jmiSair, jmiMetodoBissecao, jmiFornecedor, jmiBairro, jmiProduto; 
    JLabel labelA, labelB, labelN;
    JTextField campoA, campoB, campoN;
    JPanel painelDado, painelBotao;
    GridLayout layoutDado;
    JSeparator separador;
          
    public CNumerico(){ 
        super("CNumerico - Salvador da Pátria");
        setSize(800,600);
        c.setLayout(new BorderLayout()); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        setResizable(false); 
        setJMenuBar(getMenu()); 
        show();       
        jmiBairro.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    if (e.getSource()==jmiBairro){
                        System.exit(0);
                    }
                    if (e.getSource()==jmiMetodoBissecao){
                        System.exit(0);
                    }
                    if (e.getSource()==jmiFornecedor){
                        System.exit(0);
                    }
                    if (e.getSource()==jmiProduto){
                        System.exit(0);
                    }
                    if (e.getSource()==jmiSair){
                        System.exit(0);
                    }
                }
            }
        );
    } 
    
   private JMenuBar getMenu(){ 
      jmbPrincipal = new JMenuBar(); 
      jmCadastro = new JMenu("Cadastro");
      jmiBairro = new JMenu("Bairro");
      jmiMetodoBissecao = new JMenu("Método da Bisseção");
      jmiFornecedor = new JMenu("Fornecedor");
      jmiProduto = new JMenu("Produto");
      separador = new JSeparator();
      jmiSair = new JMenuItem("Sair");
       
      jmbPrincipal.add(jmCadastro);
      jmCadastro.add(jmiBairro);
      jmCadastro.add(jmiMetodoBissecao);
      jmCadastro.add(jmiFornecedor);
      jmCadastro.add(jmiProduto);
      jmCadastro.add(separador);
      jmCadastro.add(jmiSair); 
      return jmbPrincipal; 
   } 
    
    public static void main(String[] args){ 
        new CNumerico(); 
    }
}
F

tenta chamar o metodo show() depois de adicionar o actionlistener… pq o show() vai “segurar” a thread enquanto a janela estiver aberta, e portando o actionlistener so sera adicionado depois da janela fechar…

E

Tentei… mas não funcionou…

C

Ja tento o metodo

setvisible( true );

so q coloca ele no fim do construtor!!

E

mudei um pouco o código, consegui fazer só um funcionar os outros não. o que está funcionando e o jmiSair, os outros nada. o código que modifiquei ta ai…

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CNumerico extends JFrame implements ActionListener{ 
    Container c=getContentPane(); 
    JMenuBar jmbPrincipal; 
    JMenu jmCadastro; 
    JMenuItem jmiSair, jmiMetodoBissecao, jmiFornecedor, jmiBairro, jmiProduto; 
    JLabel labelA, labelB, labelN;
    JTextField campoA, campoB, campoN;
    JPanel painelDado, painelBotao;
    GridLayout layoutDado;
    JSeparator separador;
          
    public CNumerico(){ 
        super("CNumerico - Salvador da Pátria");
        setSize(800,600);
        c.setLayout(new BorderLayout()); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        setResizable(false); 
        setJMenuBar(getMenu()); 
        show();
        jmiBairro.addActionListener(this); 
        jmiMetodoBissecao.addActionListener(this); 
        jmiFornecedor.addActionListener(this); 
        jmiProduto.addActionListener(this); 
        jmiSair.addActionListener(this);
    } 
    
    private JMenuBar getMenu(){ 
        jmbPrincipal = new JMenuBar(); 
        jmCadastro = new JMenu("Cadastro");
        jmiBairro = new JMenu("Bairro");
        jmiMetodoBissecao = new JMenu("Método da Bisseção");
        jmiFornecedor = new JMenu("Fornecedor");
        jmiProduto = new JMenu("Produto");
        separador = new JSeparator();
        jmiSair = new JMenuItem("Sair");
       
        jmbPrincipal.add(jmCadastro);
        jmCadastro.add(jmiBairro);
        jmCadastro.add(jmiMetodoBissecao);
        jmCadastro.add(jmiFornecedor);
        jmCadastro.add(jmiProduto);
        jmCadastro.add(separador);
        jmCadastro.add(jmiSair); 
        return jmbPrincipal; 
    } 
    
    public static void main(String[] args){ 
        new CNumerico(); 
    }
    
    public void actionPerformed(ActionEvent e){ 
        if (e.getSource()==jmiBairro){ 
            System.exit(0); 
        } 
        if (e.getSource()==jmiMetodoBissecao){ 
            System.exit(0); 
        } 
        if (e.getSource()==jmiFornecedor){ 
            System.exit(0); 
        } 
        if (e.getSource()==jmiProduto){ 
            System.exit(0); 
        } 
        if (e.getSource()==jmiSair){ 
            System.exit(0); 
        } 
    } 
}

Ewerson

E

não teve jeito, não consegui…

Ewerson

L

coloque:

if(e.get.....)
  método
else if(....)
  método
else if(....)
  método

assim vai…

M

Nos meus programas, inclusive um que estou fazendo, eu usei como o linh4res colocou e deu certo… :grin:

E

ja consegui valeu…

eu tava criando um JMenu e tinha que ser um JMenuItem…

valew…

Ewerson

Criado 11 de novembro de 2004
Ultima resposta 14 de nov. de 2004
Respostas 10
Participantes 6