2

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

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

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

4

5 回答 5

6

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

于 2009-11-17T13:00:35.577 回答
2

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

不要这样做:

hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);

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

于 2009-11-12T23:41:13.807 回答
0

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

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

如果您需要更多帮助,请发布说明问题的SSCCE 。

于 2009-11-12T23:33:02.670 回答
0

解决它。

忘记添加 actionPerformed 方法。

于 2009-11-12T23:35:51.680 回答
0

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

于 2009-11-12T23:24:23.443 回答