Advertisement
steverobinson

Semi - Scientific Calculator

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