Everything works fine, yet the calculator doesn't calculate, any ideas where I went wrong?
Code: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[]; private Panel keypad; private TextField lcd; 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 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 (+) keys for (int i=0; i<keys.length; i++) keys[i].addActionListener(this); add(lcd, BorderLayout.NORTH); add(keypad, BorderLayout.CENTER); addWindowListener( new WindowAdapter() { public void windowclosing(WindowEvent e) { System.exit(0); } } ); } // end of constructor method public void actionPerformed(ActionEvent e) { //test for menu item clicks String arg = e.getActionCommand(); if (arg== "Exit") System.exit(0); if (arg == "Clear") { clearText = true; first = true; op1 = 0.0; lcd.setText(""); lcd.requestFocus(); } if (arg == "Copy") { Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); StringSelection contents = new StringSelection(lcd.getText()); cb.setContents(contents, null); } if (arg == "Paste") { Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable content = cb.getContents(this); try { String s = (String)content.getTransferData(DataFlavor.stringFlavor); lcd.setText(calcPattern.format(Double.parseDouble(s))); } catch (Throwable exc) { lcd.setText(""); } } if (arg == "About") { String message = "Calculator ver. 1.0\nOpenExhibit Software\nCopyright 2007\nAll rights reserved"; JOptionPane.showMessageDialog(null,message,"About Calculator", JOptionPane. INFORMATION_MESSAGE); } // test for button clicks foundKey = false; // search for the clicked key for (int i=0; i<keys.length && !foundKey; i++) { if(e.getSource() == keys[i]) { foundKey = true; switch(i) { // number and decimal point buttons case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 15: if(clearText) { lcd.setText(""); clearText = false; } lcd.setText(lcd.getText() + keys[i].getLabel()); break; // operator buttons case 10: case 11: case 12: case 13: case 14: clearText = true; if (first) // first operand { if(lcd.getText().length()==0) op1 = 0.0; else op1 = Double.parseDouble(lcd.getText()); first = false; clearText = true; lastOp = 1; // save last operator } else // second operand { switch(lastOp) { case 10: // divide button op1 /= Double.parseDouble(lcd.getText()); break; case 11: // multiply button op1 *= Double.parseDouble(lcd.getText()); break; case 12: op1 -= Double.parseDouble(lcd.getText()); break; case 13: op1 += Double.parseDouble(lcd.getText()); break; } // end of switch(lastOp) lcd.setText(calcPattern.format(op1)); clearText = true; if(i==14) first = true; //equal button else lastOp = i; //save last operator } // end else break; } // end of switch(i) } // end of if } // end of for } // end of actionPerformed public static void main(String args[]) { // set frame properties Calculator f = new Calculator(); f.setTitle("Calculator Application"); f.setBounds(200,200,300,300); f.setVisible(true); //set image properties and add to frame Image icon = Toolkit.getDefaultToolkit().getImage("calcImage.gif"); f.setIconImage(icon); } // end of main } // end of class




Reply With Quote