Sign In
Sign-Up
Welcome!
Close
Would you like to make this site your homepage? It's fast and easy...
Yes, Please make this my home page!
No Thanks
Don't show this to me again.
Close
import java.awt.*; import java.awt.event.*; import javax.swing.*; class CalculatorPanel extends JPanel implements ActionListener { public CalculatorPanel() { setLayout(new BorderLayout()); JPanel d = new JPanel(); CalcPad = new PadDisplay(10, 28); JScrollPane scrollPane = new JScrollPane(CalcPad); d.add(scrollPane); add(d,"South"); display = new CalcField("Press CM to turn on the calculator"); display.setEditable(false); display.setBackground(Color.white); add(display, "North"); JPanel p = new JPanel(); p.setLayout(new GridLayout(5, 5)); addButton(p, "CM"); String buttons = "CRS=789/^456*(123-)0."; for (int i = 0; i < buttons.length(); i++) addButton(p, buttons.substring(i, i + 1)); addButton(p, "+/-"); addButton(p, "+"); addButton(p, "sqrt"); add(p, "Center"); } private void addButton(Container c, String s) { JButton b = new JButton(s); c.add(b); if(s.equals("R") || s.equals("S")) b.addActionListener(MButtonListener); else { if('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(".")) b.addActionListener(DButtonListener); else b.addActionListener(this); } } private double Arg1 = 0.0; private double Arg2 = 0.0; private String op = null; private boolean firstInput = true; private double[] buffer = new double[10]; private double TempBuffer = 0.0; private int saveIndex = 0; private int recallIndex = 0; private boolean unSaved = true; private boolean unRecalled = true; private boolean parenthesis=false; private String TempOp = null; private CalcField display; private PadDisplay CalcPad; MemoryButtonListener MButtonListener = new MemoryButtonListener(); DigitButtonListener DButtonListener= new DigitButtonListener(); public void actionPerformed( ActionEvent e ) { String in = e.getActionCommand(); if(in.equals("C")) { CalcPad.appendTextToPad("Clear"); display.setText("0.0"); clearOp(); Arg1=0.0; } else if(in.equals("CM")) { CalcPad.appendTextToPad("Clear Memory"); clearMe(); } else if(in.equals("(")){ TempBuffer=Arg1; TempOp = op; CalcPad.append(in); parenthesis=true; } else if(in.equals(")")){ Arg2=display.getNumber(); CalcPad.appendTextToPad(display.getText()); CalcPad.append(in); compute(); CalcPad.appendLineToPad(); display.setNumber(Arg1); CalcPad.appendNumberToPad(Arg1); Arg1=TempBuffer; op=TempOp; parenthesis=false; clearOp(); } else if(in.equals("=")) { Arg2 = display.getNumber(); CalcPad.appendTextToPad(display.getText()); CalcPad.appendLineToPad(); compute(); display.setNumber(Arg1); CalcPad.appendNumberToPad(Arg1); clearOp(); } else if(in.equals("+/-")) { double x = display.getNumber(); x = (-1)*x; display.setNumber(x); CalcPad.appendTextToPad(display.getText()); CalcPad.appendLineToPad(); } else { Arg1 = display.getNumber(); CalcPad.appendTextToPad(display.getText()); op=in; switch(in.charAt(0)) { case 's': CalcPad.appendOpToPad(in); CalcPad.appendNumberToPad(Arg1); compute(); display.setNumber(Arg1); CalcPad.appendLineToPad(); CalcPad.appendNumberToPad(Arg1); break; default: CalcPad.appendOpToPad(op); break; } firstInput = true; } } public void compute() { switch(op.charAt(0)) { case '+': Arg1 +=Arg2; break; case '-': Arg1 -=Arg2; break; case '*': Arg1 *=Arg2; break; case '/': Arg1 /=Arg2; break; case '^': Arg1 = Math.pow(Arg1, Arg2); break; case 's': if(Arg1 < 0) display.setText("Error, Press C"); else Arg1 = Math.sqrt(Arg1); break; default: display.setText("Wrong Op, Press C"); break; } } public void clearOp() { Arg2 = 0.0; firstInput = true; TempBuffer=0.0; TempOp = null; } public void clearMe() { Arg1 = 0.0; Arg2 = 0.0; firstInput = true; TempBuffer = 0.0; TempOp = null; for(int i=0; i<10; i++) buffer[i]=0.0; saveIndex = 0; recallIndex = 0; unSaved = true; unRecalled = true; display.setText("0.0"); } //---------------------------------------------------------- //INNER CLASS: MemoryButtonListener public class MemoryButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if (s.equals("S")) { TempBuffer=display.getNumber(); unSaved = false; display.setText(""); CalcPad.appendOpToPad("save at: buffer"); } else if(s.equals("R")) { unRecalled = false; display.setText(""); CalcPad.appendOpToPad("recall buffer"); } } }; //----------------------------------------------------------- //INNER CLASS: DigitButtonListenner public class DigitButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { if(unSaved && unRecalled){ display.AddString(e.getActionCommand()); } else { String s = e.getActionCommand(); if(s.equals(".")) { display.setText("Error input, press C"); CalcPad.appendTextToPad("Wrong buffer index number"); } else { if(unSaved == false) { saveIndex=Integer.valueOf(s).intValue(); buffer[saveIndex]=TempBuffer; TempBuffer = 0.0; CalcPad.append(String.valueOf(saveIndex).toString()); CalcPad.append("\n"); unSaved = true; } else if(unRecalled == false) { recallIndex = Integer.valueOf(s).intValue(); display.setNumber(buffer[recallIndex]); CalcPad.append(String.valueOf(recallIndex).toString()); CalcPad.append("\n"); unRecalled = true; } } } } }; //----------------------------------------------------------- //INNER CLASS: CalcField, extends TextField private class CalcField extends TextField { CalcField(String x) { super(x); } public void AddString(String x) { if((unSaved==true) && (unRecalled==true)){ if (firstInput) { this.setText(x); firstInput = false; } else this.setText(display.getText() + x); } else{} } private void setNumber(double x) { this.setText(String.valueOf(x).toString()); } private void setNumber(int x) { this.setText(String.valueOf(x).toString()); } private double getNumber() { return Double.valueOf(this.getText()).doubleValue(); } }; //-------------------------------------------------------------- //INNER class PadDisplay extents JTextArea private class PadDisplay extends JTextArea { PadDisplay(int cn, int an) { super(cn, an); } private void appendTextToPad(String s) { this.append("\t" + s + "\n"); } private void appendLineToPad() { this.append("____________________\n"); } private void appendNumberToPad(double x) { this.append("\t"+String.valueOf(x).toString()+"\n\n"); } private void appendOpToPad(String s) { this.append(" "+s); } }; //--------------------------------------------------------------- } /*class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle("Calculator World"); setSize(320, 380); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); CalculatorPanel CalcPane = new CalculatorPanel(); Container contentPane = getContentPane(); contentPane.add(CalcPane, "North"); } }*/ public class CalculatorApplet extends JApplet { public void init() { Container contentPane = getContentPane(); contentPane.add(new CalculatorPanel()); } }