我有一个扩展JPanel并实现MouseListener的类。在此类中,如果单击面板,则执行以下两个函数:
@Override
public void mouseClicked(MouseEvent e) {
displayExitPopup();
}
private void displayExitPopup() {
JPopupMenu exitPopup = new JPopupMenu();
exitPopup.add("Exit Game");
exitPopup.add("Cancel");
exitPopup.show(this, this.getWidth(), this.getHeight());
}
一切正常,弹出窗口显示2个选项。
现在我尝试在点击弹出菜单中的两个选项中的任何一个时执行操作 - System.exit(0)
如果单击Exit Game
,则弹出菜单关闭Cancel
是点击。怎么办呢?
答案 0 :(得分:3)
如果您查看JavaDocs for JPopupMenu#add(String)
,您会发现这是一种方便的方法,可以返回JMenuItem
,然后您应该可以向其添加ActionListener
请查看Bringing up a PopupMenu了解详情
话虽如此,我鼓励您使用Action
API,这样您就可以创建自包含的工作单元,这也提供了创建JMenuItem
所需的信息由JPopupMenu
有关详细信息,请查看How to Use Actions
您还应该使用JComponent#setComponentPopupMenu
而不是尝试使用MouseListener
,因为不同的平台对弹出菜单有不同的触发器,而且它很复杂而且很难实现
答案 1 :(得分:2)
将项目添加到JPopupMenu
时,您会收到JMenuItem
。在此对象上,您可以致电addActionListener
添加动作监听器,就像使用JTextField
或JButton
一样。
exitPopup.add("Cancel").addActionListener(e-> {
// do something
});