单击JMenuItem时执行操作?

时间:2009-11-12 23:23:00

标签: java swing actionlistener

所以我在框架的顶部创建了一个带有基本菜单的简单程序,现在我只需要在每个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);

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

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

5 个答案:

答案 0 :(得分:5)

建议:不要添加单独的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()

答案 1 :(得分:2)

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

不要这样做:

hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);

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

答案 2 :(得分:0)

提供Action的实例(从AbstractAction扩展)到JMenuItem

答案 3 :(得分:0)

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

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

如果您需要更多帮助,请发布展示问题的SSCCE

答案 4 :(得分:0)

修正了它。

忘记添加actionPerformed方法。