【问题标题】:How to access MouseEvent getX()/getY() from JPopupMenu?如何从 JPopupMenu 访问 MouseEvent getX()/getY()?
【发布时间】:2014-10-02 21:02:20
【问题描述】:

我有一个这样的弹出菜单

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

然后我添加一个 MouseListener:

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

在 MenuItem 的 Actionlistener 中,我想从 MouseEvent 访问 x/y 数据。如果不将它们保存在额外的变量中,这是否可能?我想得到这样的东西:

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

    });

【问题讨论】:

  • “不将它们保存在一个额外的变量中?” - 有那么大的问题吗,一个Point currentPoint 成员?
  • 不,这不是问题。我只是想如果没有这个解决方案是可能的。

标签: java swing mouseevent actionlistener jpopupmenu


【解决方案1】:

如果您想获取触发弹出菜单的事件的鼠标坐标 - 不,不保存它是不可能的。如果您想获取触发了菜单项操作的鼠标事件 - 是的,有可能:EventQueue.getCurrentEvent(); 将返回该事件(您应该检查此事件是否是鼠标事件,如果是,则强制转换它,因为该操作也可以由按键事件触发)。

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

【讨论】:

  • 感谢分享!
猜你喜欢
  • 2012-05-30
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2011-09-08
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多