Search code examples
javaswingmouseeventactionlistenerjpopupmenu

How to access MouseEvent getX()/getY() from JPopupMenu?


I have a popupmenu like this

final JPopupMenu contextMenu = new JPopupMenu();
final JMenuItem addTask = new JMenuItem("Add Task");

Then i add a MouseListener:

component.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent e) 
        {    
            if (e.isPopupTrigger()) {
                contextMenu.show(e.getComponent(), e.getX(), e.getY());
            }
        }
}

In my Actionlistener for the MenuItem i would like to access the x/y-data from my MouseEvent. Is this possible without saving them in an extra variable? i would like to get something like this:

addTask.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            //System.out.println(Mouse.getX()+", "+Mouse.getY());
        }

    });

Solution

  • If you want to get the mouse coordinate of event which has trggered the popup menu - no it's impossible without to save it. If you want to get the mouse event whcih has triggered the menu item action - yes it's possible: EventQueue.getCurrentEvent(); will return the event (you should check whether this event is a mouse event and if yes - cast it, because the action can also be triggered with key event).

    public void actionPerformed(ActionEvent arg0) {
      AWTEvent evt = EventQueue.getCurrentEvent();
      if (evt instanceof MouseEvent) {
        MouseEvent me = (MouseEvent) evt;
      }
    }