Pessoal estou querendo acessar um JPopupMenu apartir de uma tecla de atalho.
Ja fiz o seguinte código:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Teste extends JFrame {
JPopupMenu popupMenu;
JButton okButton;
public Teste() {
Action okAction = new MessageAction("OK", "Ação OK");
Action helpAction = new MessageAction("F1", "Ação Ajuda");
okButton = new JButton(okAction);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JTextField(40));
c.add(okButton);
getRootPane().setDefaultButton(okButton);
getRootPane().getActionMap().put("F1", helpAction);
getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "F1");
setSize(640, 480);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
class MessageAction extends AbstractAction {
String _msg;
String nomeEvento;
MessageAction(String name, String msg) {
putValue(NAME, name);
_msg = msg;
nomeEvento = name;
}
public void actionPerformed(ActionEvent evt) {
System.out.println(nomeEvento);
if(nomeEvento.equals("F1")){
abrirPopup();
}
}
private void abrirPopup(){
popupMenu = new JPopupMenu();
JMenuItem file = new JMenuItem("File");
JMenuItem edit = new JMenuItem("Edit");
JMenuItem help = new JMenuItem("help");
popupMenu.add(file);
popupMenu.add(edit);
popupMenu.add(help);
popupMenu.show(okButton, 0, 10);
}
private void fecharPopup(){
popupMenu.setVisible(false);
}
}
public static void main(String[] args) {
Teste t = new Teste();
t.setVisible(true);
}
}
Ai funciona perfeitamente da primeira vez que eu clicar em “F1”, o menu abre direitinho, mais caso eu coloque o foco em qualquer componente da tela essa funcionalidade nao funciona mais.
O que eu devo fazer para isso funcionar a qualquer momente da vida da aplicação ???