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(); } }); } }