/* Chapter 6: Java Calculator Programmer: Heather Jacob Date: October 13, 2010 Filename: Calculator.java Purpose: This program creates a calculator with a menu */ import java.awt.*; import java.awt.event.*; import java.awt.datatransfer.*; import java.text.DecimalFormat; import javax.swing.JOptionPane; public class Calculator extends Frame implements ActionListener { private Button keys[]; //An array of buttons numbered 0-15 to represent the numbers and operators of the calculator private Panel keypad; //A panel to display the buttons private TextField lcd; //A textfield across the top that will display the numbers as they're entered private double op1; private boolean first; private boolean foundKey; private boolean clearText; private int lastOp; private DecimalFormat calcPattern; public Calculator() { //Create an instance of the menu MenuBar mnuBar = new MenuBar(); setMenuBar(mnuBar); //Construct and populate the File Menu Menu mnuFile = new Menu("File", true); mnuBar.add(mnuFile); MenuItem mnuFileExit = new MenuItem("Exit"); mnuFile.add(mnuFileExit); //Construct and populate the Edit menu Menu mnuEdit = new Menu("Edit", true); mnuBar.add(mnuEdit); MenuItem mnuEditClear = new MenuItem("Clear"); mnuEdit.add(mnuEditClear); mnuEdit.insertSeparator(1); MenuItem mnuEditCopy = new MenuItem("Copy"); mnuEdit.add(mnuEditCopy); MenuItem mnuEditPaste = new MenuItem("Paste"); mnuEdit.add(mnuEditPaste); //Construct and populate the About menu Menu mnuAbout = new Menu("About", true); mnuBar.add(mnuAbout); MenuItem mnuAboutCalculator = new MenuItem("About Calculator"); mnuAbout.add(mnuAboutCalculator); //Add the ActionListener to each menu item mnuFileExit.addActionListener(this); mnuEditClear.addActionListener(this); mnuEditCopy.addActionListener(this); mnuEditPaste.addActionListener(this); mnuAboutCalculator.addActionListener(this); //Assign an ActionCommand to each menu item. When the user clicks the component, the getActionCommand() method retrieves the keyword and assigns it to a string variable, then the variable is used to search for a matching action. mnuFileExit.setActionCommand("Exit"); mnuEditClear.setActionCommand("Clear"); mnuEditCopy.setActionCommand("Copy"); mnuEditPaste.setActionCommand("Paste"); mnuAboutCalculator.setActionCommand("About"); //Construct components and initialize beginning values lcd = new TextField(20); lcd.setEditable(false); keypad = new Panel(); keys = new Button[16]; first = true; op1 = 0.0; clearText = true; lastOp = 0; calcPattern = new DecimalFormat("########.########"); //Construct and assign captions to the Buttons for (int i=0; i<=9; i++) keys[i] = new Button(String.valueOf(i)); keys[10] = new Button("/"); keys[11] = new Button("*"); keys[12] = new Button("-"); keys[13] = new Button("+"); keys[14] = new Button("="); keys[15] = new Button("."); //Set Frame and keypad layout to grid layout setLayout(new BorderLayout()); keypad.setLayout(new GridLayout(4,4,10,10)); for (int i=7; i<=10; i++) // 7, 8, 9, divide keypad.add(keys[i]); for (int i=4; i<=6; i++) //4, 5, 6 keypad.add(keys[i]); keypad.add(keys[11]); //multiply for (int i=1; i<=3; i++) //1, 2, 3 keypad.add(keys[i]); keypad.add(keys[12]); //subtract keypad.add(keys[0]); // 0 key for (int i=15; i>=13; i--) keypad.add(keys[i]); // decimal point, =, + // Add ActionListener to each button in the array for (int i=0; i