/* Coded By Karthik Ananthapadmanaban Web - http://www.utdallas.edu/~kxa060100 */ import java.awt.*; import java.awt.event.*; public class Calculator extends Frame implements ActionListener, ItemListener, WindowListener { TextField txtMain; Button add, sub, mul, div, eq, in, clear; String curr; public int cmdprev; double num1,num2; boolean flag,append=true; Button btn[]=new Button[11]; Checkbox conv; Button sin, cos, tan; double ctext; Button exp, log, pow, sqr; public Calculator() { super("Calculator"); setSize(350,250); addWindowListener(this); Panel ib = new Panel(); txtMain=new TextField(20); txtMain.setEditable(false); ib.add(txtMain); add(ib,BorderLayout.NORTH); txtMain.setText("0"); Panel tb = new Panel(); add=new Button("+"); add.addActionListener(this); tb.add(add); sub=new Button("-"); sub.addActionListener(this); tb.add(sub); mul=new Button("*"); mul.addActionListener(this); tb.add(mul); div=new Button("/"); div.addActionListener(this); tb.add(div); in=new Button("1/x"); in.addActionListener(this); tb.add(in); eq=new Button("="); eq.addActionListener(this); tb.add(eq); clear=new Button("C"); clear.addActionListener(this); tb.add(clear); for (int i=0; i<10; i++) { btn[i]=new Button(Integer.toString(i)); btn[i].addActionListener(this); tb.add(btn[i]); } btn[10]=new Button("."); btn[10].addActionListener(this); tb.add(btn[10]); add(tb,BorderLayout.CENTER); tb.setLayout(new GridLayout(3,6,5,5)); Panel cb = new Panel(); conv=new Checkbox("Inv"); conv.addItemListener(this); cb.add(conv); sin=new Button("Sin"); sin.addActionListener(this); cb.add(sin); cos=new Button("Cos"); cos.addActionListener(this); cb.add(cos); tan=new Button("Tan"); tan.addActionListener(this); cb.add(tan); add(cb,BorderLayout.EAST); cb.setLayout(new GridLayout(4,1,5,5)); Panel eb = new Panel(); exp=new Button("Exp"); exp.addActionListener(this); eb.add(exp); log=new Button("Log"); log.addActionListener(this); eb.add(log); pow=new Button("Pow"); pow.addActionListener(this); eb.add(pow); sqr=new Button("Sqrt"); sqr.addActionListener(this); eb.add(sqr); add(eb,BorderLayout.SOUTH); } public void windowClosing(WindowEvent event) { setVisible(false); System.exit(0); } public void windowDeiconified(WindowEvent event) { } public void windowIconified(WindowEvent event) { } public void windowActivated(WindowEvent event) { } public void windowDeactivated(WindowEvent event) { } public void windowOpened(WindowEvent event) { } public void windowClosed(WindowEvent event) { } public void actionPerformed(ActionEvent ae) { String cmd=ae.getActionCommand(); if (cmd.equals("+")) { cmdprev=1; if (flag) { curr=txtMain.getText(); try { num2=Double.parseDouble(curr); num1=num1 + num2; txtMain.setText(Double.toString(num1)); } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } else { flag=true; append=false; curr=txtMain.getText(); num1=Double.parseDouble(curr); } } else if (cmd.equals("-")) { cmdprev=2; if (flag) { curr=txtMain.getText(); try { num2=Double.parseDouble(curr); num1=num1 - num2; txtMain.setText(Double.toString(num1)); } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } else { flag=true; append=false; curr=txtMain.getText(); num1=Double.parseDouble(curr); } } else if (cmd.equals("*")) { cmdprev=3; if (flag) { curr=txtMain.getText(); try { num2=Double.parseDouble(curr); num1=num1 * num2; txtMain.setText(Double.toString(num1)); } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } else { flag=true; append=false; curr=txtMain.getText(); num1=Double.parseDouble(curr); } } else if (cmd.equals("/")) { cmdprev=4; if (flag) { curr=txtMain.getText(); try { num2=Double.parseDouble(curr); try { num1=num1 / num2; txtMain.setText(Double.toString(num1)); } catch (ArithmeticException e) { txtMain.setText("Divide by 0"); } } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } else { flag=true; append=false; curr=txtMain.getText(); num1=Double.parseDouble(curr); } } else if (cmd.equals("=")) { try { num2=Double.parseDouble(txtMain.getText()); switch(cmdprev) { case 1: num1 = num1 + num2; txtMain.setText(Double.toString(num1)); break; case 2: num1 = num1 - num2; txtMain.setText(Double.toString(num1)); break; case 3: num1 = num1 * num2; txtMain.setText(Double.toString(num1)); break; case 4: try { num1 = num1 / num2; txtMain.setText(Double.toString(num1)); } catch (ArithmeticException e) { txtMain.setText("Divide by 0"); } break; } } catch (NumberFormatException e) { txtMain.setText("Invalid number"); } } else if (cmd.equals("C")) { flag=false; txtMain.setText("0"); } else if (cmd.equals("0")) { if (txtMain.getText().equals("0")) { txtMain.setText("0"); } else { if (append) { txtMain.setText(txtMain.getText() + "0"); } else { txtMain.setText(""); txtMain.setText("0"); append=true; } } } else if (cmd.equals("1")) { if (txtMain.getText().equals("0")) { txtMain.setText("1"); } else { if (append) { txtMain.setText(txtMain.getText() + "1"); } else { txtMain.setText(""); txtMain.setText("1"); append=true; } } } else if (cmd.equals("2")) { if (txtMain.getText().equals("0")) { txtMain.setText("2"); } else { if (append) { txtMain.setText(txtMain.getText() + "2"); } else { txtMain.setText(""); txtMain.setText("2"); append=true; } } } else if (cmd.equals("3")) { if (txtMain.getText().equals("0")) { txtMain.setText("3"); } else { if (append) { txtMain.setText(txtMain.getText() + "3"); } else { txtMain.setText(""); txtMain.setText("3"); append=true; } } } else if (cmd.equals("4")) { if (txtMain.getText().equals("0")) { txtMain.setText("4"); } else { if (append) { txtMain.setText(txtMain.getText() + "4"); } else { txtMain.setText(""); txtMain.setText("4"); append=true; } } } else if (cmd.equals("5")) { if (txtMain.getText().equals("0")) { txtMain.setText("5"); } else { if (append) { txtMain.setText(txtMain.getText() + "5"); } else { txtMain.setText(""); txtMain.setText("5"); append=true; } } } else if (cmd.equals("6")) { if (txtMain.getText().equals("0")) { txtMain.setText("6"); } else { if (append) { txtMain.setText(txtMain.getText() + "6"); } else { txtMain.setText(""); txtMain.setText("6"); append=true; } } } else if (cmd.equals("7")) { if (txtMain.getText().equals("0")) { txtMain.setText("7"); } else { if (append) { txtMain.setText(txtMain.getText() + "7"); } else { txtMain.setText(""); txtMain.setText("7"); append=true; } } } else if (cmd.equals("8")) { if (txtMain.getText().equals("0")) { txtMain.setText("8"); } else { if (append) { txtMain.setText(txtMain.getText() + "8"); } else { txtMain.setText(""); txtMain.setText("8"); append=true; } } } else if (cmd.equals("9")) { if (txtMain.getText().equals("0")) { txtMain.setText("9"); } else { if (append) { txtMain.setText(txtMain.getText() + "9"); } else { txtMain.setText(""); txtMain.setText("9"); append=true; } } } else if (cmd.equals(".")) { if (txtMain.getText().equals("")) { txtMain.setText("0."); } else { txtMain.setText(txtMain.getText() + "."); } } else if (cmd.equals("Sin")) { try { ctext=Double.parseDouble(txtMain.getText()); if (conv.getState()) { double r=Math.asin((double) ctext); txtMain.setText(Double.toString(r)); } else { double r=Math.sin((double) ctext); txtMain.setText(Double.toString(r)); } } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } else if (cmd.equals("Cos")) { try { ctext=Double.parseDouble(txtMain.getText()); if (conv.getState()) { double r=Math.acos((double) ctext); txtMain.setText(Double.toString(r)); } else { double r=Math.cos((double) ctext); txtMain.setText(Double.toString(r)); } } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } else if (cmd.equals("Tan")) { try { ctext=Double.parseDouble(txtMain.getText()); if (conv.getState()) { double r=Math.atan((double) ctext); txtMain.setText(Double.toString(r)); } else { double r=Math.tan((double) ctext); txtMain.setText(Double.toString(r)); } } catch (NumberFormatException e) { txtMain.setText("Invalid Number"); } } repaint(); } public void itemStateChanged(ItemEvent ae) { repaint(); } public static void main(String args[]) { Calculator calc=new Calculator(); calc.setVisible(true); } }