简体   繁体   中英

Performing an action when an JMenuItem is clicked?

So i have made a simple program with a basic menu at the top of the frame, Now i just need to put actions behind each JMenuItem. Im struggling to work the code out though, Here is what i thought would work:

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);

This doesn't seem to work though, I thought that this code would create a small popup window when the menu item is clicked.

Can any spot the bug because i cant seem to.

Suggestion: Instead of adding a separate ActionListener , just use 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);
    }
});

I'd also suggest, instead of setting EXIT_ON_CLOSE on the popup menu, you set it on the main frame of your application, and have the action simply call theMainFrame.dispose() .

You got it working, but you have another problem.

Don't do this:

hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);

When you close the pop-up frame, your entire JVM terminates. Consult JFrame.setDefaultCloseOperation javadocs for a more appropriate value.

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

Based on the code you posted it looks like it should work, but we can't see the entire context of how the menu item is being used.

Did you debug your code (with a System.out.println) to see if the ActionListener is being invoked?

If you need more help post your SSCCE that demonstrates the problem.

Fixed it.

Forgot to add the actionPerformed method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM