1  import java.awt.*;
  2  import java.awt.event.*;
  3  import javax.swing.*;
  4  
  5  public class MenuDemo extends JApplet {
  6    // Text fields for Number 1, Number 2, and Result
  7    private JTextField jtfNum1, jtfNum2, jtfResult;
  8  
  9    // Buttons "Add", "Subtract", "Multiply" and "Divide"
 10    private JButton jbtAdd, jbtSub, jbtMul, jbtDiv;
 11  
 12    // Menu items "Add", "Subtract", "Multiply","Divide" and "Close"
 13    private JMenuItem jmiAdd, jmiSub, jmiMul, jmiDiv, jmiClose;
 14  
 15    public MenuDemo() {
 16      // Create menu bar
 17      JMenuBar jmb = new JMenuBar();
 18  
 19      // Set menu bar to the applet
 20      setJMenuBar(jmb);
 21  
 22      // Add menu "Operation" to menu bar
 23      JMenu operationMenu = new JMenu("Operation");
 24      operationMenu.setMnemonic('O');
 25      jmb.add(operationMenu);
 26  
 27      // Add menu "Exit" to menu bar
 28      JMenu exitMenu = new JMenu("Exit");
 29      exitMenu.setMnemonic('E');
 30      jmb.add(exitMenu);
 31  
 32      // Add menu items with mnemonics to menu "Operation"
 33      operationMenu.add(jmiAdd= new JMenuItem("Add", 'A'));
 34      operationMenu.add(jmiSub = new JMenuItem("Subtract", 'S'));
 35      operationMenu.add(jmiMul = new JMenuItem("Multiply", 'M'));
 36      operationMenu.add(jmiDiv = new JMenuItem("Divide", 'D'));
 37      exitMenu.add(jmiClose = new JMenuItem("Close", 'C'));
 38  
 39      // Set keyboard accelerators
 40      jmiAdd.setAccelerator(
 41        KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
 42      jmiSub.setAccelerator(
 43        KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
 44      jmiMul.setAccelerator(
 45        KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.CTRL_MASK));
 46      jmiDiv.setAccelerator(
 47        KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.CTRL_MASK));
 48  
 49      // Panel p1 to hold text fields and labels
 50      JPanel p1 = new JPanel(new FlowLayout());
 51      p1.add(new JLabel("Number 1"));
 52      p1.add(jtfNum1 = new JTextField(3));
 53      p1.add(new JLabel("Number 2"));
 54      p1.add(jtfNum2 = new JTextField(3));
 55      p1.add(new JLabel("Result"));
 56      p1.add(jtfResult = new JTextField(4));
 57      jtfResult.setEditable(false);
 58  
 59      // Panel p2 to hold buttons
 60      JPanel p2 = new JPanel(new FlowLayout());
 61      p2.add(jbtAdd = new JButton("Add"));
 62      p2.add(jbtSub = new JButton("Subtract"));
 63      p2.add(jbtMul = new JButton("Multiply"));
 64      p2.add(jbtDiv = new JButton("Divide"));
 65  
 66      // Add panels to the frame
 67      setLayout(new BorderLayout());
 68      add(p1, BorderLayout.CENTER);
 69      add(p2, BorderLayout.SOUTH);
 70  
 71      // Register listeners
 72      jbtAdd.addActionListener(new ActionListener() {
 73        @Override
 74        public void actionPerformed(ActionEvent e) {
 75          calculate('+');
 76        }
 77      });
 78      jbtSub.addActionListener(new ActionListener() {
 79        @Override
 80        public void actionPerformed(ActionEvent e) {
 81          calculate('-');
 82        }
 83      });
 84      jbtMul.addActionListener(new ActionListener() {
 85        @Override
 86        public void actionPerformed(ActionEvent e) {
 87          calculate('*');
 88        }
 89      });
 90      jbtDiv.addActionListener(new ActionListener() {
 91        @Override
 92        public void actionPerformed(ActionEvent e) {
 93          calculate('/');
 94        }
 95      });
 96      jmiAdd.addActionListener(new ActionListener() {
 97        @Override
 98        public void actionPerformed(ActionEvent e) {
 99          calculate('+');
100        }
101      });
102      jmiSub.addActionListener(new ActionListener() {
103        @Override
104        public void actionPerformed(ActionEvent e) {
105          calculate('-');
106        }
107      });
108      jmiMul.addActionListener(new ActionListener() {
109        @Override
110        public void actionPerformed(ActionEvent e) {
111          calculate('*');
112        }
113      });
114      jmiDiv.addActionListener(new ActionListener() {
115        @Override
116        public void actionPerformed(ActionEvent e) {
117          calculate('/');
118        }
119      });
120      jmiClose.addActionListener(new ActionListener() {
121        @Override
122        public void actionPerformed(ActionEvent e) {
123          System.exit(1);
124        }
125      });
126    }
127  
128    /** Calculate and show the result in jtfResult */
129    private void calculate(char operator) {
130      // Obtain Number 1 and Number 2
131      int num1 = (Integer.parseInt(jtfNum1.getText().trim()));
132      int num2 = (Integer.parseInt(jtfNum2.getText().trim()));
133      int result = 0;
134  
135      // Perform selected operation
136      switch (operator) {
137        case '+': result = num1 + num2;
138                  break;
139        case '-': result = num1 - num2;
140                  break;
141        case '*': result = num1 * num2;
142                  break;
143        case '/': result = num1 / num2;
144      }
145  
146      // Set result in jtfResult
147      jtfResult.setText(String.valueOf(result));
148    }
149  
150    public static void main(String[] args) {
151      MenuDemo applet = new MenuDemo();
152      JFrame frame = new JFrame();
153      //EXIT_ON_CLOSE == 3
154      frame.setDefaultCloseOperation(3);
155      frame.setTitle("MenuDemo");
156      frame.getContentPane().add(applet, BorderLayout.CENTER);
157      applet.init();
158      applet.start();
159      frame.setSize(400,320);
160      frame.setLocationRelativeTo(null);
161      frame.setVisible(true);
162    }
163  }