Evento ao clicar no Menu

13 respostas
pix

Seguinte, estou fazendo um código para gerar menu via banco de dados

public MenuTest() {
        super();

        MenuListener listener = new MenuListener() {
            public void menuCanceled(MenuEvent e) {
                dumpInfo("Canceled", e);
            }
            public void menuDeselected(MenuEvent e) {
                dumpInfo("Deselected", e);
            }
            public void menuSelected(MenuEvent e) {
                dumpInfo("Selected", e);
            }
            private void dumpInfo(String s, MenuEvent e) {
                JMenu menu = (JMenu) e.getSource();
                System.out.println(s + ": " + menu.getText());
            }
            
        };

        JMenu fileMenu = new JMenu("Arquivo");
        fileMenu.addMenuListener(listener);
        fileMenu.add(new JMenuItem("Sair"));
        JMenu helpMenu = new JMenu("Sobre");
        helpMenu.addMenuListener(listener);
        helpMenu.add(new JMenuItem("About"));
        helpMenu.addSeparator();
        JMenu subMenu = new JMenu("Categories");
        subMenu.addMenuListener(listener);
        JRadioButtonMenuItem rb;
        ButtonGroup group = new ButtonGroup();
        subMenu.add(rb = new JRadioButtonMenuItem("A Little Help", true));
        group.add(rb);
        subMenu.add(rb = new JRadioButtonMenuItem("A Lot of Help"));
        group.add(rb);
        helpMenu.add(subMenu);
        JMenuBar mb = new JMenuBar();
        mb.add(fileMenu);
        mb.add(helpMenu);
        setJMenuBar(mb);
    }
    public static void main(String args[]) {
        JFrame frame = new MenuTest();
        frame.setSize(300, 300);
        frame.show();
    }

Quero adicionar um evento quando se clica em um JMenuItem

13 Respostas

Felagund

O Evento que vc tem que usar é o ActionListener, não o MenuListener

[]'s

pix

E existe a possibilidade de me mostrar um exemplo?

hodrigohamalho
public MenuTest()  extends JFrame implements ActionListener{

        private JButton botaoGerar = new JButton("Teste");

        public MenuTest(){
             super("");
             this.setSize(700,700);  
             this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
         }

         @SuppressWarnings("deprecation")
         public static void main(String... args){
              Principal exe = new Principal();
              exe.show();
         }

         // Aqui que você define o que suas ações fara.
        @Override
         public void actionPerformed(ActionEvent e) {
              if (e.getSource() == botaoGerar)  // Verifica se o usuario clicou no botaoGerar...
                   System.out.println("Ação!");
         }
}

Tenta adaptar esse exemplo a sua realidade ai…
se vc colocar esse botão ai num Frame por exemplo, quando pressiona-lo ele chamara o metódo actionPerformed.
Caso não entenda eu te mando esse exemplo aqui mais completo.

pix

Resumindo vou ter que mudar todo o código.

Enfim, o que eu quero é um menu que possa ser criado via Banco de Dados.

Se alguém tiver um exemplo fico agradecido.

hodrigohamalho

Como assim via banco de dados?
Você quer que os campos que apareçam sejam trazidos do banco?
Exemplo:
Um menu com:
Inserir
Pesquisar
Alterar
Excluir

Você quer que ele pegue isso do banco certo?

pix

quero algo do tipo

JMenuBar mb = new JMenuBar(); for (int i=0; i<=5; i++) { JMenu i = new JMenu("Menu" + i); mb.add(i); }

claro com tambem o jMenuItem e que consigo gerar o addActionListener

pix

a idéia é gerar um menu dinâmico, cada usuário vai ter um menu dependendo de suas permissões

Felagund

Cara pra vc fazer isso, vc vai ter que armazenas alguma informação a mais na base, tipo por exemplo se for pra abir uma tela, vc salva uma coluna com o nome da tela que vc quer abrir, dai vc recupera da base junto com o menu e abre.

Assim com for fica meio complicado hehehe.

pix

fiz com for pra demonstrar que o jMenu não aceita String como “nome”, o meu problema está ali.

Felagund

pra criar menus com texto vc usa MenuItem.

err
quer dizer use a propriedade setText do JMenu

[]'s

pix

já consegui o seguinte código

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class MenuTest extends JFrame {

    public MenuTest() {
        super();
        JMenuBar mb = new JMenuBar();
        String[] jMenus = {"Arquivo", "Editar", "Exibir", "Formatar", "Ajuda"};

        Iterator<String> it = toArrayList(jMenus);
        //enquanto houver nomes no Iterator
        while (it.hasNext()) {
            String titulo = it.next();			//armazena o nome (titulo do menu)
            JMenu menu = new JMenu(titulo);		//cria o JMenu a ser adicionado
            menu.add(new JMenuItem("Teste")).addActionListener(
                    new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            System.exit(0);
                        }
                    });
            mb.add(menu);						//adiciona o JMenu à barra de menu
        }

        setJMenuBar(mb);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
        JFrame frame = new MenuTest();
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    private Iterator toArrayList(Object[] itens) {
        ArrayList list = new ArrayList();
        for (int i = 0; i < itens.length; i++) {
            list.add(itens[i]);
        }
        return list.iterator();
    }
}

Agora o problema e o jMenuItem que eu não sei como separar o jMenuItem pro seu jMenu

pix

Bom acho que consegui alguma coisa, vou colocar o código pra quem quiser criar menu dinâmico algum dia, criei com array ai é só trocar pro banco de dados, enfim.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

/**
 *
 * @author Daniel
 */
public class MenuTest extends JFrame {

    public MenuTest() {
        super();
        JMenuBar mb = new JMenuBar();
        String[] jMenus = {"Arquivo", "Editar", "Exibir", "Formatar", "Ajuda"};
        String[] jMenuItens = {"Teste1", "Teste2", "Teste2", "Teste3", "Teste4"};
        String[] jMenuItens2 = {"Teste1", "Teste2", "Teste2", "Teste3", "Teste4"};

        Iterator<String> it = toArrayList(jMenus);
        //enquanto houver nomes no Iterator
        int cont = 0;
        while (it.hasNext()) {
            cont = cont + 1;
            String titulo = it.next();			//armazena o nome (titulo do menu)
            JMenu menu = new JMenu(titulo);		//cria o JMenu a ser adicionado
            if (cont == 1) {
                Iterator<String> item = toArrayList(jMenuItens);
                //enquanto houver nomes no Iterator
                while (item.hasNext()) {
                    System.out.println("a");
                    String tituloItem = item.next();
                    menu.add(new JMenuItem(tituloItem)).addActionListener(
                            new ActionListener() {
                                public void actionPerformed(ActionEvent e) {
                                    System.exit(0);
                                }
                            });
                }
            }
            mb.add(menu);						//adiciona o JMenu à barra de menu
        }

        setJMenuBar(mb);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
        JFrame frame = new MenuTest();
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    private Iterator toArrayList(Object[] itens) {
        ArrayList list = new ArrayList();
        for (int i = 0; i < itens.length; i++) {
            list.add(itens[i]);
        }
        return list.iterator();
    }
}
hodrigohamalho

err, podia ter expicado melhor o q tu queria fazer, facilitaria bastante…
huehue

Criado 9 de julho de 2009
Ultima resposta 9 de jul. de 2009
Respostas 13
Participantes 3