ago

30

Abrindo um menu popup ao clicar em um botão

By Felipe Saab

1:33h da madrugada de um domingo e eu to começando a escreve esse post….
Fim de carreira neh… aiuhaiuhaiuahiahu

Mas vamos ao que interessa: às vezes pode ser bem interessante abrir um menu popup ao clicar em um botão da sua aplicação, como por exemplo em uma tela de cadastro de contas a pagar. A conta a pagar pode estar vinculada a um fornecedor, a um equipamento, a um veículo ou seja lá o que for que você o cliente queira.

Uma boa prática que eu gosto de usar é sempre deixar o usuário poder fazer uma busquinha rápida pelo fornecedor (equipamento, veículo, …) ao invés de ter que digitar o código dele lá.

Sendo assim, ao invés de fazer um botão para a busca de fornecedores, outro botão pra busca disso e outro pra busca daquilo, eu faço apenas um botão que quando clicado abre um menu com todas as opções e frescuras que eu quiser.

Muito mais simples neh… então mãos a obra: crie um novo projeto na sua IDE, adicione um JFrame e coloque um JTextField e um JButton nele (um iconezinho sempre eh legal neh… iauhiauaihu), fica +/- assim:

O meu JTextField vai se chamar jTF_Texto e o JButton vai ser jB_Busca, fique a vontade para dar os nomes mais convenientes.
Para abrir o menu popup usa-se o JPopupMenu, que nada mais é do que um JMenu que aparece em tempo de execução e por cima dos outros componentes. Ou seja, os itens que vão estar dentro do menu popup são os mesmos do menu estático: JMenuItem, JCheckBoxMenuItem e etc.

Quando o usuário clicar no botão agente cria o JPopupMenu e os JMenuItems dinamicamente, portanto podemos escrever o código tanto no evento de ActionPerformed quanto em algum de mouse. Eu vou escrever no MouseClicked:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
 
    //cria o primeiro item do menu e atribui uma ação pra ele
    JMenuItem item1 = new JMenuItem("Opção 1");
    item1.addActionListener(new ActionListener() {
 
        public void actionPerformed(ActionEvent e) {
            jTF_Texto.setText("Clicou na Opção 1");
        }
    });
 
    //cria o segundo item do menu e atribui uma ação pra ele
    JMenuItem item2 = new JMenuItem("Opção 2");
    item2.addActionListener(new ActionListener() {
 
        public void actionPerformed(ActionEvent e) {
            jTF_Texto.setText("Clicou na Opção 2");
        }
    });
 
    //cria o terceiro item do menu e atribui uma ação pra ele
    JMenuItem item3 = new JMenuItem("Opção 3");
    item3.addActionListener(new ActionListener() {
 
        public void actionPerformed(ActionEvent e) {
            jTF_Texto.setText("Clicou na Opção 3");
        }
    });
 
    //cria o menu popup e adiciona os 3 itens
    JPopupMenu popup = new JPopupMenu();
    popup.add(item1);
    popup.add(item2);
    popup.add(item3);
 
    //mostra na tela
    popup.show(jB_Busca, 10, 10);
}

O código é totalmente auto-explicativo nao eh… ainda mais com alguns comentarios… hehe
Talvez a única parte diferente seja mostrar o menu: o método show(…) da classe JPopupMenu é o responsável por jogar o menu por cima dos outros componentes, e pra isso, ele precisa saber em cima de quem ele vai aparecer… então é só passar para ele uma referencia do nosso botão. Os outros dois parâmetros são as coordenadas X,Y que o menu vai ser desenhado, sendo que a coordenada 0,0 é a mesma coordenada 0,0 do botão. Só pra dar um efeito mais bonitinho, eu desloquei 10 em X e 10 em Y:

Bem simples não?…
Dúvidas é só postar, twittar…

Para quem quiser o código fonte desse exemplo, é só pegar o Projeto do NetBeans.

[]s, e até a próxima.

One Response so far

cara, muito bom o artigo, vlw ai, ajudou muito XD

Leave a comment