Advertisement
steverobinson

Sci. Calc. Applet

Aug 10th, 2011
707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.51 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.lang.Math;
  5. import javax.script.ScriptEngine;
  6. import javax.script.ScriptEngineManager;
  7.  
  8. /*
  9.     <applet code="Calculator.class" width="400" height="400">
  10.     </applet>
  11. */
  12.  
  13.  
  14. /**
  15. *Semi-Scientific Calculator [APPLET]
  16. *@author Steve Robinson
  17. *@version 1.1
  18. *@see footyntech.wordpress.com
  19. */
  20.    
  21. public class Calculator extends JApplet {
  22.        
  23.         public void init()
  24.         {
  25.             //setTitle("My Scientific Calculator");
  26.             EventQueue.invokeLater(new Runnable() {
  27.                 public void run()
  28.                 {
  29.                     CalculatorPanel calcPanel=new CalculatorPanel();
  30.                     add(calcPanel);
  31.             //      pack();
  32.                 }
  33.             });
  34.         }
  35.     }
  36.    
  37.     class CalculatorPanel extends JPanel
  38.     {
  39.         private JTextField display1;
  40.         private JTextField display2;
  41.         private JPanel buttonPanel;
  42.         private JPanel displayPanel;
  43.        
  44.         ActionListener listener=new CalculatorListener();
  45.         ActionListener displayListener=new DisplayListener();
  46.        
  47.        
  48.         //Helper Methods to add buttons. Thanks to Core Java V1 book for this wonderful idea!
  49.        
  50.         void addDisplayButton(String type)
  51.         {
  52.             JButton button=new JButton(type);
  53.             button.addActionListener(displayListener);
  54.             buttonPanel.add(button);
  55.            
  56.         }
  57.        
  58.         void addCalcButton(String type)
  59.         {
  60.             JButton button=new JButton(type);
  61.             button.addActionListener(listener);
  62.             buttonPanel.add(button);
  63.            
  64.         }
  65.        
  66.         public CalculatorPanel()
  67.         {
  68.            
  69.            
  70.             //Layout for Main Calculator Panel
  71.             setLayout(new BorderLayout());
  72.            
  73.             //Display Panel
  74.             displayPanel=new JPanel();
  75.             displayPanel.setLayout(new GridLayout(2,1));
  76.            
  77.             display1=new JTextField("");
  78.             displayPanel.add(display1);
  79.            
  80.             display2=new JTextField("");
  81.             displayPanel.add(display2);
  82.             display1.requestFocusInWindow();
  83.            
  84.             add(displayPanel,BorderLayout.NORTH);
  85.            
  86.             //Panel for Buttons
  87.             buttonPanel=new JPanel();
  88.             //ButtonLayout
  89.             buttonPanel.setLayout(new GridLayout(8,4));
  90.            
  91.             //Button Creation
  92.             addCalcButton("e");
  93.            
  94.             addDisplayButton("DEL");
  95.             addDisplayButton("AC");
  96.             JButton dummyButton=new JButton("");
  97.             buttonPanel.add(dummyButton);
  98.        
  99.             addCalcButton("log");
  100.             addCalcButton("sin");
  101.             addCalcButton("tan");
  102.             addCalcButton("cos");
  103.             addCalcButton("%");
  104.             addCalcButton("x\u00B2");
  105.             addCalcButton("x\u00B3");
  106.             addCalcButton("sqrt");
  107.             addCalcButton("1/x");
  108.             addCalcButton("(");
  109.             addCalcButton(")");
  110.             addCalcButton("ANS");
  111.             addCalcButton("7");
  112.             addCalcButton("8");
  113.             addCalcButton("9");
  114.             addCalcButton("+");
  115.             addCalcButton("4");
  116.             addCalcButton("5");
  117.             addCalcButton("6");
  118.             addCalcButton("-");
  119.             addCalcButton("1");
  120.             addCalcButton("2");
  121.             addCalcButton("3");
  122.             addCalcButton("/");
  123.             addCalcButton("0");
  124.             addCalcButton(".");
  125.             addCalcButton("=");
  126.             addCalcButton("*");
  127.            
  128.            
  129.             add(buttonPanel,BorderLayout.CENTER);
  130.            
  131.            
  132.         }
  133.        
  134.         ScriptEngineManager manager=new ScriptEngineManager();
  135.         ScriptEngine engine=manager.getEngineByName("JavaScript");
  136.         boolean opDone=false;
  137.        
  138.         private class DisplayListener implements ActionListener
  139.         {
  140.             public void actionPerformed(ActionEvent event)
  141.             {
  142.                 String command=event.getActionCommand();
  143.                
  144.                 if(command.equals("AC"))
  145.                 {
  146.                     display1.setText("");
  147.                     display2.setText("");
  148.                 }
  149.                 else if(command.equals("OFF"))
  150.                 {
  151.                     System.exit(0);
  152.                 }
  153.                 else if(command.equals("DEL"))
  154.                 {
  155.                     display1.setText(display1.getText().substring(0, display1.getText().length()-1));
  156.                 }
  157.             }
  158.         }
  159.        
  160.         private class CalculatorListener implements ActionListener
  161.         {
  162.             public void actionPerformed (ActionEvent event)
  163.             {
  164.                 String command=event.getActionCommand();
  165.  
  166.                 try{
  167.                     if(command.equals("log"))
  168.                     {
  169.                         double input=evaluateExpression(display1.getText());
  170.                         display2.setText(Double.toString(Math.log(input)));
  171.                         opDone=true;   
  172.                     }
  173.                     else if(command.equals("sin"))
  174.                     {
  175.                         double input=evaluateExpression(display1.getText());
  176.                         display2.setText(Double.toString(Math.sin(input)));
  177.                         opDone=true;
  178.                     }                                      
  179.                     else if(command.equals("tan"))
  180.                     {
  181.                         double input=evaluateExpression(display1.getText());
  182.                         display2.setText(Double.toString(Math.tan(input)));
  183.                         opDone=true;
  184.                     }
  185.                     else if(command.equals("cos"))
  186.                     {
  187.                         double input=evaluateExpression(display1.getText());
  188.                         display2.setText(Double.toString(Math.cos(input)));                
  189.                         opDone=true;
  190.                     }                  
  191.                     else if(command.equals("e"))
  192.                     {
  193.                         double input=evaluateExpression(display1.getText());
  194.                         display2.setText(Double.toString(Math.exp(input)));
  195.                         opDone=true;
  196.                     }                  
  197.                     else if(command.equals("x\u00B2"))
  198.                     {
  199.                         double input=evaluateExpression(display1.getText());
  200.                         display2.setText(Double.toString(input*input));
  201.                         opDone=true;
  202.                     }                  
  203.                     else if(command.equals("x\u00B3"))
  204.                     {
  205.                         double input=evaluateExpression(display1.getText());
  206.                         display2.setText(Double.toString(input*input*input));
  207.                         opDone=true;
  208.                     }  
  209.                     else if(command.equals("sqrt"))
  210.                     {
  211.                         double input=evaluateExpression(display1.getText());
  212.                         display2.setText(Double.toString(Math.sqrt(input)));
  213.                         opDone=true;
  214.                     }
  215.                     else if(command.equals("="))
  216.                     {
  217.                         String input=display1.getText();
  218.                         //System.out.println(input);
  219.                         display2.setText(Double.toString(evaluateExpression(input)));  
  220.                         opDone=true;
  221.                     }
  222.                     else if(command.equals("ANS"))
  223.                     {
  224.                         if(opDone)
  225.                         {
  226.                                 display1.setText(display2.getText());
  227.                         }
  228.                         else
  229.                         {
  230.                                 display1.setText(display1.getText()+display2.getText());
  231.                         }
  232.                            
  233.                         opDone=false;          
  234.                        
  235.                     }
  236.                     else if(command.equals("1/x"))
  237.                     {
  238.                         double input=evaluateExpression(display1.getText());
  239.                         display2.setText(Double.toString(1/input));
  240.                         opDone=true;
  241.                     }
  242.                     else
  243.                     {
  244.                         char opr=command.charAt(0);
  245.                         if(opDone)
  246.                         {
  247.                             if(Character.isDigit(opr)||opr=='.')
  248.                             {
  249.                                 display1.setText(command);
  250.                             }
  251.                             else
  252.                                 display1.setText(display2.getText()+command);
  253.                         }
  254.                         else
  255.                             display1.setText(display1.getText()+command);
  256.                         opDone=false;                      
  257.                     }
  258.                 }
  259.                 catch (Exception ex)
  260.                 {
  261.                     ex.printStackTrace();
  262.                 }
  263.  
  264.                
  265.             }
  266.            
  267.             Double evaluateExpression (String expression) throws Exception
  268.             {  
  269.                 //System.out.println(expression);
  270.                 return (Double) engine.eval(expression);
  271.             }
  272.         }
  273.        
  274.        
  275.        
  276. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement