How to make a jmenu element do something when it clicked

I am creating a GUI with Jmenu; it has jmenu elements that will do something when clicked. This is problem. I looked and looked, but I can’t figure out how to get him to do something when they press him. Also, I'm kind of like a noob, so if you could do it in a pretty simple way, that would be great!

Here is the code:

import java.awt.Color; import java.awt.Component; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.*; public abstract class windowMaker extends JFrame implements ActionListener { private JMenu menuFile; public static void main(String[] args) { createWindow(); } public static void createWindow() { JFrame frame = new JFrame(); frame.setTitle("*Game Title* Beta 0.0.1"); frame.setSize(600, 400); frame.setLocation(100, 100); frame.setVisible(true); frame.setResizable(false); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setJMenuBar(windowMaker.menuBarCreator()); frame.add(windowMaker.setTitle()); } public static void launchURL(String s) { String s1 = System.getProperty("os.name"); try { if (s1.startsWith("Windows")) { Runtime.getRuntime() .exec((new StringBuilder()) .append("rundll32 url.dll,FileProtocolHandler ") .append(s).toString()); } else { String as[] = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; String s2 = null; for (int i = 0; i < as.length && s2 == null; i++) if (Runtime.getRuntime() .exec(new String[] { "which", as[i] }).waitFor() == 0) s2 = as[i]; if (s2 == null) throw new Exception("Could not find web browser"); Runtime.getRuntime().exec(new String[] { s2, s }); } } catch (Exception exception) { System.out .println("An error occured while trying to open the web browser!\n"); } } public static JMenuBar menuBarCreator() { // create the menu parts JMenuBar menuBar = new JMenuBar(); JMenu menuFile = new JMenu("File"); JMenu menuHelp = new JMenu("Help"); JMenuItem menuFileWebsite = new JMenuItem("Website"); JMenuItem menuFileExit = new JMenuItem("Exit"); JMenuItem menuHelpRules = new JMenuItem("Rules"); JMenuItem menuHelpAbout = new JMenuItem("About"); JMenuItem menuHelpHow = new JMenuItem("How To Play"); // make the shortcuts for the items menuFile.setMnemonic(KeyEvent.VK_F); menuHelp.setMnemonic(KeyEvent.VK_H); // put the menu parts with eachother menuBar.add(menuFile); menuBar.add(menuHelp); menuFile.add(menuFileWebsite); menuFile.add(menuFileExit); menuHelp.add(menuHelpRules); menuHelp.add(menuHelpAbout); menuHelp.add(menuHelpHow); return menuBar; } public static Component setTitle() { JLabel title = new JLabel("Welcome To *the game*"); title.setVerticalAlignment(JLabel.TOP); title.setHorizontalAlignment(JLabel.CENTER); return title; } } 

BTW: I want the website setting (let's just work with this for now) to use the launchURL method; I know that it works.

+8
java user-interface swing jmenuitem jmenu
source share
3 answers

A JMenuItem is a button form ( AbstractButton ). The usual pattern is to create your button using Action (see JMenuItem Constructor). Action defines the name and action to be performed. Most people extend AbstractAction and implement the actionPerformed , which is called when the button is clicked.

A possible implementation might look like this:

 JMenuItem menuItem = new JMenuItem(new AbstractAction("My Menu Item") { public void actionPerformed(ActionEvent e) { // Button pressed logic goes here } }); 

or

 JMenuItem menuItem = new JMenuItem(new MyAction()); ... public class MyAction extends AbstractAction { public MyAction() { super("My Menu Item"); } public void actionPerformed(ActionEvent e) { // Button pressed logic goes here } } 

Please note that all of the above also applies to JButton . Also take a look at Java is very useful. How to use actions .

+10
source share

You just need to add an ActionListener to JMenuItem1 as follows:

 jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); 

and then do the action in jMenuItem1ActionPerformed (evt):

 private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: javax.swing.JOptionPane.showMessageDialog(null, "foo"); // more code... } 

For your code:

  ... JMenuItem menuFileWebsite = new JMenuItem("Website"); JMenuItem menuFileExit = new JMenuItem("Exit"); menuFileExit.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { menuFileExitActionPerformed(evt); } }); JMenuItem menuHelpRules = new JMenuItem("Rules"); 

and

 private static void menuFileExitActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); } 
+2
source share

To add any actions to the button, simply create an object from the class that implements the ActionListener interface:

 menuFileWebsite.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { launchURL("http://www.google.com"); } }); 

here we create an anonymous internal object that implements the Actionlistener interface, and redefine the actionforforemed method to do our job.

I am making some changes to my code following the java standard in the naming class and creating any GUI components in EDT.

 // WindowMakerDemo.java import java.awt.Component; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.*; public final class WindowMakerDemo { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new MyFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("*Game Title* Beta 0.0.1"); frame.setSize(600, 400); frame.setLocation(100, 100); frame.setResizable(false); frame.setVisible(true); } }); } } final class MyFrame extends JFrame{ public MyFrame() { createWindow(); } private void createWindow() { setJMenuBar(menuBarCreator()); add(setTitle()); } private JMenuBar menuBarCreator() { // create the menu parts JMenuBar menuBar = new JMenuBar(); JMenu menuFile = new JMenu("File"); JMenu menuHelp = new JMenu("Help"); JMenuItem menuFileWebsite = new JMenuItem("Website"); JMenuItem menuFileExit = new JMenuItem("Exit"); JMenuItem menuHelpRules = new JMenuItem("Rules"); JMenuItem menuHelpAbout = new JMenuItem("About"); JMenuItem menuHelpHow = new JMenuItem("How To Play"); // website button action menuFileWebsite.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { launchURL("http://www.google.com"); } }); // exit action menuFileExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); // make the shortcuts for the items menuFile.setMnemonic(KeyEvent.VK_F); menuHelp.setMnemonic(KeyEvent.VK_H); // put the menu parts with eachother menuBar.add(menuFile); menuBar.add(menuHelp); menuFile.add(menuFileWebsite); menuFile.add(menuFileExit); menuHelp.add(menuHelpRules); menuHelp.add(menuHelpAbout); menuHelp.add(menuHelpHow); return menuBar; } private Component setTitle() { JLabel title = new JLabel("Welcome To *the game*"); title.setVerticalAlignment(JLabel.TOP); title.setHorizontalAlignment(JLabel.CENTER); return title; } private void launchURL(String s) { String s1 = System.getProperty("os.name"); try { if (s1.startsWith("Windows")) { Runtime.getRuntime().exec((new StringBuilder()).append("rundll32 url.dll,FileProtocolHandler ").append(s).toString()); } else { String as[] = {"firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape"}; String s2 = null; for (int i = 0; i < as.length && s2 == null; i++) { if (Runtime.getRuntime().exec(new String[]{"which", as[i]}).waitFor() == 0) { s2 = as[i]; } } if (s2 == null) { throw new Exception("Could not find web browser"); } Runtime.getRuntime().exec(new String[]{s2, s}); } } catch (Exception exception) { System.out.println("An error occured while trying to open the web browser!\n"); } } } 
+1
source share

All Articles