单击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方法。