PopUpMenu
Um menu de contexto ou um menu pop-up é um menu em uma interface gráfica do usuário (GUI) que aparece em cima de interação do usuário, como uma operação de clique com o botão direito do mouse. Um menu de contexto oferece um conjunto limitado de opções que estão disponíveis no estado atual, ou contexto, do sistema operacional ou aplicativo. Normalmente, as opções disponíveis são as ações relacionadas com o objeto selecionado.
Os menus de contexto foram introduzidos no ambiente Smalltalk do computador Xerox Alto, onde eram chamados menus pop-up. O sistema operacional NEXTSTEP desenvolveu a ideia, incorporando a funcionalidade em que o botão do meio ou o da direita traziam o menu principal na posição do mouse, eliminando a necessidade de mover o ponteiro por toda a tela. Esse menu principal era vertical e mudava de acordo com o texto da operação do sistema.
Exemplo:
Neste exemplo criamos um objeto JPopUpMenu atrelado no contexto de um objeto JPanel e usamos eventos do mouse e do menu pop-up para lhe atribuir funcionalidades.
Java
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
public class PopUp implements MouseListener
{
// Declara Componentes
JLabel titulo;
JLabel rodape;
JPanel painel;
JPopupMenu pMenu;
JMenuItem item;
// Declara variaveis
String acao = "Você clicou no: ";
// Declara painel
public Container criaPainel()
{
// Cria painel
painel = new JPanel(new BorderLayout());
painel.setOpaque(true);
// Cria Labels
titulo = new JLabel("Clique com o botão direito no formulario");
rodape = new JLabel(acao);
// Cria layout
painel.add(titulo, BorderLayout.PAGE_START);
painel.add(rodape, BorderLayout.PAGE_END);
// Cria popupmenu
pMenu = new JPopupMenu();
// Cria itens do menu e eventos
item = new JMenuItem("Item 1");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0)
{
rodape.setText(acao + "Item 1");
}
});
pMenu.add(item);
item = new JMenuItem("Item 2");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0)
{
rodape.setText(acao + "Item 2");
}
});
pMenu.add(item);
// Cria separador
pMenu.add(new JSeparator());
item = new JMenuItem("Item 3");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0)
{
rodape.setText(acao + "Item 3");
}
});
pMenu.add(item);
painel.addMouseListener(this);
return painel;
}
// Declara GUI
public static void criaGUI()
{
// Cria formulario
JFrame formulario = new JFrame("PopUp Menu");
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Cria classe popupmenu
PopUp menu = new PopUp();
// Adiciona painel ao formulario
formulario.setContentPane(menu.criaPainel());
// Adiciona propriedades ao formulario
formulario.setSize(400, 300);
formulario.setVisible(true);
}
// Cria Eventos para o mouse
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0)
{
// verifica se o evento foi disparado no painel
if (arg0.getSource() == painel )
{
pMenu.show(painel, arg0.getX(), arg0.getY());
}
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
// Cria GUI
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
criaGUI();
}
});
}
}

