单击JMenuItem时执行操作?

所以我在框架的顶部创建了一个带有基本菜单的简单程序,现在我只需要在每个JMenuItem后面放置动作。 我努力工作代码,这是我认为可行的:

JMenu file_Menu = new JMenu("File"); JMenuItem fileExit = new JMenuItem("Exit Program"); file_Menu.add(fileExit); fileExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JFrame hello = new JFrame("POPUP"); hello.setSize(100,75); hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE); hello.setVisible(true); } }); main_Menu.add(file_Menu); 

这似乎不起作用,我认为这个代码会在单击菜单项时创建一个小的弹出窗口。

可以发现任何错误,因为我似乎无法。

建议:不要添加单独的ActionListener ,只需使用AbstractAction

 JMenuItem fileExit = new JMenuItem(new AbstractAction("Exit Program") { public void actionPerformed(ActionEvent ae) { JFrame hello = new JFrame("POPUP"); hello.setSize(100,75); hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE); hello.setVisible(true); } }); 

我还建议,不要在弹出菜单上设置EXIT_ON_CLOSE ,而是将其设置在应用程序的主框架上,然后让操作简单地调用theMainFrame.dispose()

你有它工作,但你有另一个问题。

不要这样做:

 hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE); 

关闭弹出框架时,整个JVM都会终止。 请参阅JFrame.setDefaultCloseOperation javadocs以获取更合适的值。

给Action的一个实例(从AbstractAction扩展)到JMenuItem

基于您发布的代码,它看起来应该可以工作,但是我们无法看到菜单项如何被使用的整个上下文。

您是否调试了代码(使用System.out.println)以查看是否正在调用ActionListener?

如果您需要更多帮助发布您的SSCCE ,以certificate问题。

固定它。

忘了添加actionPerformed方法。