向 JPopupMenu 选项添加操作

Add actions to JPopupMenu options

我有一个扩展 JPanel 并实现 MouseListener 的 class。在这个 class 中,如果单击面板,将执行以下两个函数:

@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 被点击。如何做到这一点?

如果你看一下 JavaDocs for JPopupMenu#add(String),你会发现这是一个方便的方法,其中 returns 一个 JMenuItem,然后你应该可以添加一个 [=12] =] 到它

查看 Bringing up a PopupMenu 了解更多详情

话虽如此,我还是鼓励您使用 Action API,这将使您能够创建自包含的工作单元,它还提供创建JMenuItemJPopupMenu

使用

查看 How to Use Actions 了解更多详情

您还应该使用 JComponent#setComponentPopupMenu 而不是尝试使用 MouseListener,因为不同的平台对弹出菜单有不同的触发器,而且它非常复杂和丑陋

将项目添加到 JPopupMenu 时,您会得到一个 JMenuItem。在这个对象上,您可以调用 addActionListener 来添加一个动作侦听器,就像您使用 JTextFieldJButton.

exitPopup.add("Cancel").addActionListener(e-> {
    // do something
});