Desenvolvedor e Analista de Sistemas | IFPA

domingo, 3 de março de 2013

Java - Abrindo um menu popup ao clicar em um botão

com 0 Comentário

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.

+1

0 comentários :

Postar um comentário

Total de visualizações