I am trying to create a menu GUI. I am having problems with the action listeners Any help would be great. Thanks

Write an GUI application that display a menu system. The menu system should allow the user to select one package, one phone, and any of the options desired. As the user selects items from the menu, the application should show the prices of the items selected.

(This GUI application uses AWT and SWING imports to display the menu system)

Question Details:

Cell Solutions, a cell phone provider, sells the following packages:
300 minutes per month: $45.00 per month
800 minutes per month: $65.00 per month
1500 minutes per month: $99.00 per month

The provider sells the following phones. ( A 6% sales tax applies to the sale of a phone.)

Model 100: $29.95
Model 110: $49.95
Model 200: $99.95

Customers may also select the following options:

Voice mail: $5.00 per month

Text messaging: $10.00 per month

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 *  The MenuWindow class demonstrates a menu system.
 */

public class MenuWindow extends JFrame
{
   private JLabel messageLabel;            // To display a message
   private JLabel results;// to display result
   private final int LABEL_WIDTH = 400;    // The label's width
   private final int LABEL_HEIGHT = 200;   // The label's height

   // The following variables will reference menu components.
   private JMenuBar menuBar;   // The menu bar
   private JMenu fileMenu;     // The File menu
   private JMenu textMenu;     // The Text menu
   private JMenu cellMenu;     // The phone  menu
   private JMenu addMenu;     // The add on  menu
   private JMenuItem exitItem; // An item to exit the application
   private JRadioButtonMenuItem blackItem; // To make the text black
   private JRadioButtonMenuItem redItem;   // To make the text red
   private JRadioButtonMenuItem blueItem;  // To make the text blue
   private JRadioButtonMenuItem blackItem1; // To make the text black
   private JRadioButtonMenuItem redItem1;   // To make the text red
   private JRadioButtonMenuItem blueItem1;  // To make the text blue

   private JCheckBoxMenuItem voiceItem;  // To toggle visibility
   private JCheckBoxMenuItem textItem;  // To toggle visibility

   /**
    *  Constructor
    */

   public MenuWindow()
   {
      // Call the JFrame constructor.
      super("Cell Phone Package");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Create the message label and set its size and color.
      messageLabel = new JLabel("Use the  menu to " +
                 "select the best plan for you.",
                 SwingConstants.CENTER);
      messageLabel.setPreferredSize(
                 new Dimension(LABEL_WIDTH, LABEL_HEIGHT));
      messageLabel.setForeground(Color.BLACK);

      // Add the label to the content pane.
      add(messageLabel);



      // Build the menu bar.
      buildMenuBar();

      // Pack and display the window.
      pack();
      setVisible(true);


   }

   /**
    *  The buildMenuBar method builds the menu bar.
    */

   private void buildMenuBar()
   {
      // Create the menu bar.
      menuBar = new JMenuBar();

      // Create the file and text menus.
      buildFileMenu();
      buildTextMenu();
      buildAddMenu();
      buildCellMenu();

      // Add the file and text menus to the menu bar.
      menuBar.add(fileMenu);
      menuBar.add(textMenu);
      menuBar.add(addMenu);
      menuBar.add(cellMenu);


      // Set the window's menu bar.
      setJMenuBar(menuBar);
   }

   /**
    *  The buildFileMenu method builds the File menu
    *  and returns a reference to its JMenu object.
    */

   private void buildFileMenu()
   {
      // Create an Exit menu item.
      exitItem = new JMenuItem("Exit");
      exitItem.setMnemonic(KeyEvent.VK_X);
      exitItem.addActionListener(new ExitListener());

      // Create a JMenu object for the File menu.
      fileMenu = new JMenu("File");
      fileMenu.setMnemonic(KeyEvent.VK_F);

      // Add the Exit menu item to the File menu.
      fileMenu.add(exitItem);
   }

   /**
    * The buildTextMenu method builds the Text menu
    * and returns a reference to its JMenu object.
    */

   private void buildTextMenu()
   {
      // Create the radio button menu items to change the color
      // of the text. Add an action listener to each one.
      blackItem = new JRadioButtonMenuItem("300 minutes:$45 per month", true);
      blackItem.setMnemonic(KeyEvent.VK_B);
      blackItem.addActionListener(new PlanListener());

      redItem = new JRadioButtonMenuItem("800 minutes:$65 per month");
      redItem.setMnemonic(KeyEvent.VK_R);
      redItem.addActionListener(new PlanListener());

      blueItem = new JRadioButtonMenuItem("1500 minutes:$99 per month");
      blueItem.setMnemonic(KeyEvent.VK_U);
      blueItem.addActionListener(new PlanListener());

      // Create a button group for the radio button items.
      ButtonGroup group = new ButtonGroup();
      group.add(blackItem);
      group.add(redItem);
      group.add(blueItem);


      // Create a JMenu object for the Text menu.
      textMenu = new JMenu("Minutes");
      textMenu.setMnemonic(KeyEvent.VK_T);

      // Add the menu items to the Text menu.
      textMenu.add(blackItem);
      textMenu.add(redItem);
      textMenu.add(blueItem);

   }

    private void buildAddMenu()
      {
         // Create the radio button menu items to change the color
         // of the text. Add an action listener to each one.
         blackItem1 = new JRadioButtonMenuItem("Model 100:$29.95", true);
         blackItem1.setMnemonic(KeyEvent.VK_S);
         blackItem1.addActionListener(new PlanListener());

         redItem1 = new JRadioButtonMenuItem("Model 110:$49.95");
         redItem1.setMnemonic(KeyEvent.VK_K);
         redItem1.addActionListener(new PlanListener());

         blueItem1 = new JRadioButtonMenuItem("Model 200:$99.95");
         blueItem1.setMnemonic(KeyEvent.VK_P);
         blueItem1.addActionListener(new PlanListener());

         // Create a button group for the radio button items.
         ButtonGroup group = new ButtonGroup();
         group.add(blackItem1);
         group.add(redItem1);
         group.add(blueItem1);


         // Create a JMenu object for the Text menu.
         addMenu = new JMenu("Cell-Phone model");
         textMenu.setMnemonic(KeyEvent.VK_Z);

         // Add the menu items to the Text menu.
         addMenu.add(blackItem1);
         addMenu.add(redItem1);
         addMenu.add(blueItem1);

   }

    private void buildCellMenu()
	{
	  // Create a check box menu item to make the text
	  // visible or invisible.
	  voiceItem = new JCheckBoxMenuItem("Voice mail option", true);
	  voiceItem.setMnemonic(KeyEvent.VK_E);
      voiceItem.addActionListener(new PlanListener());

      // Create a check box menu item to make the text
	  // visible or invisible.
	  textItem = new JCheckBoxMenuItem("Text message option", true);
	  textItem.setMnemonic(KeyEvent.VK_F);
      textItem.addActionListener(new PlanListener());

      // Create a JMenu object for the Text menu.
	  cellMenu = new JMenu("Add ons");
	  cellMenu.setMnemonic(KeyEvent.VK_D);

	  // Add the menu items to the Text menu.
	  cellMenu.add(voiceItem);
	  cellMenu.add(textItem);

	}


   /**
    * Private inner class that handles the event that
    * is generated when the user selects Exit from
    * the File menu.
    */

    private class ExitListener implements ActionListener
    {
      public void actionPerformed(ActionEvent e)
      {
         System.exit(0);
      }
    }

   /**
    * Private inner class that handles the event that
    * is generated when the user selects a color from
    * the Text menu.
    */

    private class PlanListener implements ActionListener
    {
      public void actionPerformed(ActionEvent e)
      {
		  double plan1;
		  double package1;
		  double text;
		  double message;
		  double addOn;
		  double total;

         // Determine which color was selected and
         // act accordingly.
          if (blackItem.isSelected())
		       plan1=45;
		  else if (redItem.isSelected())
		       plan1=65;
		  else if (blueItem.isSelected())
		       plan1=99; }
		  if (blackItem1.isSelected()){
		       package1=29.95;
		  else if (redItem1.isSelected())
		 	   package1=49.95;
		  else if (blueItem1.isSelected())
		       package1=99.95;}
		  if (voiceItem.isSelected())
			  message =5;
		  if(textItem.isSelected())
			   text=10;

			   addOn=message + text;
			   total= package1+(6/package1)*100+ plan1+ addOn;



      }
    }


   /**
    * The main method creates an instance of the MenuWindow
    * class, which causes it to display its window.
    */

   public static void main(String[] args)
   {
      new MenuWindow();
   }
}

Recommended Answers

All 2 Replies

you should have used your previous thread instead of creating a new one

Yea, I had to do the same Java project, it was super easy. It looks like you are on the right track. Good luck! Here is how I tackled the program:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

@SuppressWarnings({ "unchecked", "rawtypes" })
public class GUICellPhonePackages {

    public static class CellPhonePackage extends JFrame {
        /**
         * 
         */
        private static final long serialVersionUID = 6548829860028144965L;
        private static final int WINDOW_WIDTH = 400;
        private static final int WINDOW_HEIGHT = 200;
        private static final double CELL_PHONE_TAX = 1.06;
        private static JPanel panel;
        private static JLabel lblPackages;
        private static JLabel lblPhones;
        private static JLabel lblOptions;
        private static JLabel lblTotalIs;
        private static JLabel lblOutputTotal;
        private static JComboBox cmbPackages;
        private static JComboBox cmbCellPhones;
        private static JList lstOptions;
        private static String[] strArrPackages = { 
            "300 minutes per month: $45.00 per month",
            "800 minutes per month: $65.00 per month",
            "1500 minutes per month: $99.00 per month" 
        };
        private static String[] strArrPhones = { 
            "Model 100: $29.95",
            "Model 110: $49.95",
            "Model 200: $99.95"
        };
        private static String[] strArrOptions = {
            "Voice mail: $5.00 per month",
            "Text messaging: $10.00 per month"
        };
        private DecimalFormat df = new DecimalFormat("#0.00");
        private static double packageTotal;
        private static double phoneTotal;
        private static double optionTotal;

        // Public Constructor
        public CellPhonePackage () {
            // Create a new window
            JFrame window = new JFrame();

            // Display the title
            window.setTitle("Cell Phone Packages");

            // Set the size of the window
            window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);

            // Specify an action for the close button
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            // Build the panel and add it to the frame
            buildPanel();

            // Add the panel to the frame's content pane
            window.add(panel);

            // Display the window
            window.setVisible(true);
        }

        private void buildPanel() {
            // Create new labels
            lblPackages = new JLabel("Choose your package:");
            lblPhones = new JLabel("Choose your cell phone:");
            lblOptions = new JLabel("Choose your options:");
            lblTotalIs = new JLabel("Your total is:");
            lblOutputTotal = new JLabel();

            // Create combo boxes
            cmbPackages = new JComboBox(strArrPackages);
            cmbCellPhones = new JComboBox(strArrPhones);

            // Create list component
            lstOptions = new JList(strArrOptions);

            // Set the selection to Multiple
            lstOptions.setSelectionMode(
                    ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

            // Action Listeners and List Selection Listener
            cmbPackages.addActionListener(new packageListener());
            cmbCellPhones.addActionListener(new phoneListener());
            lstOptions.addListSelectionListener(new optionsListener());

            // Instantiate the Panel object in the variable you already declared
            panel = new JPanel();

            // Add all the components to the object
            panel.setLayout(new GridLayout(4, 2));
            panel.add(lblPackages);
            panel.add(cmbPackages);
            panel.add(lblPhones);
            panel.add(cmbCellPhones);
            panel.add(lblOptions);
            panel.add(lstOptions);
            panel.add(lblTotalIs);
            panel.add(lblOutputTotal);
        }

        public class packageListener implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {

                // Collect the data select
                int packageSelected = 
                        cmbPackages.getSelectedIndex();

                // Which package did they choose?
                if (packageSelected == 0) {
                    packageTotal = 45;
                } else if (packageSelected == 1) {
                    packageTotal = 65;
                } else if (packageSelected == 2) {
                    packageTotal = 99;
                }

                // Display the total
                lblOutputTotal.setText("$" +
                        df.format(optionTotal+packageTotal+phoneTotal));
            }

        }
        public class phoneListener implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                // Collect the data select
                int phoneSelected = 
                        cmbCellPhones.getSelectedIndex();

                // Which phone did they choose?
                if (phoneSelected == 0) {
                    phoneTotal = 29.95;
                } else if (phoneSelected == 1) {
                    phoneTotal = 49.95;
                } else if (phoneSelected == 2) {
                    phoneTotal = 99.95;
                }

                // Don't forget to tax
                phoneTotal *= CELL_PHONE_TAX;

                // Display the total
                lblOutputTotal.setText("$" +
                        df.format(optionTotal+packageTotal+phoneTotal));

            }

        }
        public class optionsListener implements ListSelectionListener {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                double temp = 0;

                // Collect the data select
                int optionSelected[] = 
                        lstOptions.getSelectedIndices();

                for (int i = 0; i < optionSelected.length; i++) {
                    // Which options did they choose?
                    if (optionSelected[i] == 0) {
                        temp += 5;
                    } 
                    if (optionSelected[i] == 1) {
                        temp += 10;
                    } 
                }
                optionTotal = temp;

                // Display the total
                lblOutputTotal.setText("$" +
                        df.format(optionTotal+packageTotal+phoneTotal));

            }

        }
    }

    // Main method:
    public static void main(String[] args) {
        new CellPhonePackage();

    }

}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.