Criar Menu Popup com botão

2 respostas
L

Boa tarde, ilustres freqüentadores do fórum,

Estou com uma pequena dúvida/problema para desenvolver um menu(como se fosse um popup) que aparecesse no momento em que eu clicasse em um botão.

Tomando o meu problema como exemplo, quando eu clicar no meu botão “Consultar” eu gostaria que aparecesse um menuzinho com 2 ou 3 opções de consulta que irião atualizar um JTable.

Tentei algumas implementações com JPopupMenu e JMenuItem, mas foram sem sucesso, caso alguma boa alma já tenha conseguido fazer algo parecido ou tenha alguma referência de leitura, eu ficarei imensamente grato pela gentileza. 8)

2 Respostas

D

Olha uns fragmentos de um programa que funciona aqui:

// JPopupMenu
private JPopupMenu pop = null;

// Itens

private JMenuItem jMenuItem = null;

private JMenuItem jMenuItem1 = null;

// botão que chama o menu
private btnTools = null;

// Crie os componentes de menu, o botão e tudo mais

// Coloque no actionPerformed do botão ou onde seja executado ao clicar
pop.show(btnTools, btnTools.getWidth(), btnTools.getHeight());

Acho que isso já funciona…

D

Aqui vai um exemplo completo:

/*
 * Created on 04/03/2004
 */
package teste;

import javax.swing.JFrame;

/**
 * @author Douglas Siviotti
 */
public class PopupTeste extends JFrame {
	private javax.swing.JPanel jContentPane = null;

	private javax.swing.JPanel jPanel = null;
	private javax.swing.JButton jButton = null;
	private javax.swing.JPopupMenu popup = null;
	private javax.swing.JMenuItem miPopup1 = null;
	private javax.swing.JMenuItem miPopu2 = null;
	
	public static void main(String[] args) {
		PopupTeste app = new PopupTeste();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.show();
	}
	/**
	 * This is the default constructor
	 */
	public PopupTeste() {
		super();
		initialize();
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(370, 266);
		this.setContentPane(getJContentPane());
	}
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private javax.swing.JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new javax.swing.JPanel();
			jContentPane.setLayout(new java.awt.BorderLayout());
			jContentPane.add(getJPanel(), java.awt.BorderLayout.NORTH);
			jContentPane.add(getPopup(), java.awt.BorderLayout.EAST);
		}
		return jContentPane;
	}
	/**
	 * This method initializes jPanel
	 * 
	 * @return javax.swing.JPanel
	 */
	private javax.swing.JPanel getJPanel() {
		if(jPanel == null) {
			jPanel = new javax.swing.JPanel();
			jPanel.add(getJButton(), null);
		}
		return jPanel;
	}
	/**
	 * This method initializes jButton
	 * 
	 * @return javax.swing.JButton
	 */
	private javax.swing.JButton getJButton() {
		if(jButton == null) {
			jButton = new javax.swing.JButton();
			jButton.setText("Mostrar Popup");
			jButton.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					popup.show(jButton, jButton.getWidth(), jButton.getHeight());
				}
			});
		}
		return jButton;
	}
	/**
	 * This method initializes popup
	 * 
	 * @return javax.swing.JPopupMenu
	 */
	private javax.swing.JPopupMenu getPopup() {
		if(popup == null) {
			popup = new javax.swing.JPopupMenu();
			popup.add(getMiPopup1());
			popup.add(getMiPopu2());
		}
		return popup;
	}
	/**
	 * This method initializes miPopup1
	 * 
	 * @return javax.swing.JMenuItem
	 */
	private javax.swing.JMenuItem getMiPopup1() {
		if(miPopup1 == null) {
			miPopup1 = new javax.swing.JMenuItem();
			miPopup1.setText("Item 1");
		}
		return miPopup1;
	}
	/**
	 * This method initializes miPopu2
	 * 
	 * @return javax.swing.JMenuItem
	 */
	private javax.swing.JMenuItem getMiPopu2() {
		if(miPopu2 == null) {
			miPopu2 = new javax.swing.JMenuItem();
			miPopu2.setText("Item 2");
		}
		return miPopu2;
	}
}

Acho que o fundamental é:
popup.show(jButton, jButton.getWidth(), jButton.getHeight());

Criado 3 de março de 2004
Ultima resposta 4 de mar. de 2004
Respostas 2
Participantes 2