Advertisement
steverobinson

Scientific Calculator | Steve Robinson

Jun 29th, 2011
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.67 KB | None | 0 0
  1.  
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6. import java.lang.Math;
  7. import javax.script.ScriptEngine;
  8. import javax.script.ScriptEngineManager;
  9.  
  10. /**
  11. *Calculator GUI Class
  12. *@author Steve Robinson
  13. *@version 1.0
  14. */
  15.    
  16.     public class CalculatorFrame extends JFrame {
  17.        
  18.         public CalculatorFrame()
  19.         {
  20.             setTitle("My Scientific Calculator");
  21.            
  22.             CalculatorPanel calcPanel=new CalculatorPanel();
  23.             add(calcPanel);
  24.             pack();
  25.         }
  26.     }
  27.    
  28.     class CalculatorPanel extends JPanel
  29.     {
  30.         private JTextField display1;
  31.         private JTextField display2;
  32.         private JPanel buttonPanel;
  33.         private JPanel displayPanel;
  34.        
  35.         public CalculatorPanel()
  36.         {
  37.             ActionListener listener=new CalculatorListener();
  38.             ActionListener displayListener=new DisplayListener();
  39.            
  40.            
  41.             setLayout(new BorderLayout());
  42.            
  43.             //Display
  44.             displayPanel=new JPanel();
  45.             displayPanel.setLayout(new GridLayout(2,1));
  46.            
  47.             display1=new JTextField("");
  48.             displayPanel.add(display1);
  49.             display2=new JTextField("");
  50.             displayPanel.add(display2);
  51.            
  52.             add(displayPanel,BorderLayout.NORTH);
  53.            
  54.             //Create a panel for Buttons
  55.             buttonPanel=new JPanel();
  56.             buttonPanel.setLayout(new GridLayout(8,4));
  57.            
  58.             //Button Creation
  59.             JButton e=new JButton("e");
  60.             e.addActionListener(listener);
  61.             buttonPanel.add(e);
  62.            
  63.             JButton DEL=new JButton("DEL");
  64.             DEL.addActionListener(displayListener);
  65.             buttonPanel.add(DEL);
  66.            
  67.             JButton AC=new JButton("AC");
  68.             AC.addActionListener(displayListener);
  69.             buttonPanel.add(AC);
  70.            
  71.             JButton OFF=new JButton("OFF");
  72.             OFF.addActionListener(displayListener);
  73.             buttonPanel.add(OFF);
  74.            
  75.             JButton log=new JButton("log");
  76.             log.addActionListener(listener);
  77.             buttonPanel.add(log);
  78.            
  79.             JButton sin=new JButton("sin");
  80.             sin.addActionListener(listener);
  81.             buttonPanel.add(sin);
  82.            
  83.             JButton tan=new JButton("tan");
  84.             tan.addActionListener(listener);
  85.             buttonPanel.add(tan);
  86.            
  87.             JButton cos=new JButton("cos");
  88.             cos.addActionListener(listener);
  89.             buttonPanel.add(cos);
  90.            
  91.             JButton mod=new JButton("%");
  92.             mod.addActionListener(listener);
  93.             buttonPanel.add(mod);
  94.            
  95.             JButton x_2=new JButton("x^2");
  96.             x_2.addActionListener(listener);
  97.             buttonPanel.add(x_2);
  98.            
  99.             JButton x_3=new JButton("x^3");
  100.             x_3.addActionListener(listener);
  101.             buttonPanel.add(x_3);
  102.            
  103.             JButton sqrt=new JButton("sqrt");
  104.             sqrt.addActionListener(listener);
  105.             buttonPanel.add(sqrt);
  106.            
  107.             JButton reciprocal=new JButton("1/x");
  108.             reciprocal.addActionListener(listener);
  109.             buttonPanel.add(reciprocal);
  110.            
  111.             JButton lParan=new JButton("(");
  112.             lParan.addActionListener(listener);
  113.             buttonPanel.add(lParan);
  114.            
  115.             JButton rParan=new JButton(")");
  116.             rParan.addActionListener(listener);
  117.             buttonPanel.add(rParan);
  118.            
  119.             JButton ANS=new JButton("ANS");
  120.             ANS.addActionListener(listener);
  121.             buttonPanel.add(ANS);
  122.            
  123.             JButton seven=new JButton("7");
  124.             seven.addActionListener(listener);
  125.             buttonPanel.add(seven);
  126.            
  127.             JButton eight=new JButton("8");
  128.             eight.addActionListener(listener);
  129.             buttonPanel.add(eight);
  130.            
  131.             JButton nine=new JButton("9");
  132.             nine.addActionListener(listener);
  133.             buttonPanel.add(nine);
  134.            
  135.             JButton add=new JButton("+");
  136.             add.addActionListener(listener);
  137.             buttonPanel.add(add);
  138.            
  139.             JButton four=new JButton("4");
  140.             four.addActionListener(listener);
  141.             buttonPanel.add(four);
  142.            
  143.             JButton five=new JButton("5");
  144.             five.addActionListener(listener);
  145.             buttonPanel.add(five);
  146.            
  147.             JButton six=new JButton("6");
  148.             six.addActionListener(listener);
  149.             buttonPanel.add(six);
  150.            
  151.             JButton minus=new JButton("-");
  152.             minus.addActionListener(listener);
  153.             buttonPanel.add(minus);
  154.            
  155.             JButton one=new JButton("1");
  156.             one.addActionListener(listener);
  157.             buttonPanel.add(one);
  158.            
  159.             JButton two=new JButton("2");
  160.             two.addActionListener(listener);
  161.             buttonPanel.add(two);
  162.            
  163.             JButton three=new JButton("3");
  164.             three.addActionListener(listener);
  165.             buttonPanel.add(three);
  166.            
  167.             JButton divide=new JButton("/");
  168.             divide.addActionListener(listener);
  169.             buttonPanel.add(divide);
  170.            
  171.             JButton zero=new JButton("0");
  172.             zero.addActionListener(listener);
  173.             buttonPanel.add(zero);
  174.            
  175.             JButton decimal=new JButton(".");
  176.             decimal.addActionListener(listener);
  177.             buttonPanel.add(decimal);
  178.            
  179.             JButton equal=new JButton("=");
  180.             equal.addActionListener(listener);
  181.             buttonPanel.add(equal);
  182.            
  183.             JButton multiply=new JButton("*");
  184.             multiply.addActionListener(listener);
  185.             buttonPanel.add(multiply);
  186.            
  187.             add(buttonPanel,BorderLayout.CENTER);
  188.            
  189.            
  190.         }
  191.        
  192.         //Script Engine Creation
  193.         ScriptEngineManager manager=new ScriptEngineManager();
  194.         ScriptEngine engine=manager.getEngineByName("JavaScript");
  195.        
  196.         //ActionListener for Display Functions
  197.         private class DisplayListener implements ActionListener
  198.         {
  199.             public void actionPerformed(ActionEvent event)
  200.             {
  201.                 String command=event.getActionCommand();
  202.                
  203.                 if(command.equals("AC"))
  204.                 {
  205.                     display1.setText("");
  206.                     display2.setText("");
  207.                 }
  208.                 else if(command.equals("OFF"))
  209.                 {
  210.                     System.exit(0);
  211.                 }
  212.                 else if(command.equals("DEL"))
  213.                 {
  214.                     display1.setText(display1.getText().substring(0, display1.getText().length()-1));
  215.                 }
  216.             }
  217.         }
  218.        
  219.         //ActionListener for Calculator Functions
  220.         private class CalculatorListener implements ActionListener
  221.         {
  222.             public void actionPerformed (ActionEvent event)
  223.             {
  224.                 String command=event.getActionCommand();
  225.                 //double oprOneVal = 0;
  226.                 //double oprTwoVal=0;
  227.                 //String operator="";
  228.                 //boolean operand1=true;
  229.                 //boolean operand2=false;
  230.  
  231.                 try{
  232.                     if(command.equals("log"))
  233.                     {
  234.                         double input=evaluateExpression(display1.getText());
  235.                        
  236.                             display2.setText(Double.toString(Math.log(input)));
  237.                        
  238.                     }
  239.                    
  240.                     else if(command.equals("sin"))
  241.                     {
  242.                         double input=evaluateExpression(display1.getText());
  243.                         display2.setText(Double.toString(Math.sin(input)));
  244.                     }
  245.                    
  246.                    
  247.                     else if(command.equals("tan"))
  248.                     {
  249.                         double input=evaluateExpression(display1.getText());
  250.                         display2.setText(Double.toString(Math.tan(input)));
  251.                     }
  252.                    
  253.                    
  254.                     else if(command.equals("cos"))
  255.                     {
  256.                         double input=evaluateExpression(display1.getText());
  257.                         display2.setText(Double.toString(Math.cos(input)));                
  258.                     }
  259.                    
  260.                     else if(command.equals("e"))
  261.                     {
  262.                         double input=evaluateExpression(display1.getText());
  263.                         display2.setText(Double.toString(Math.exp(input)));                
  264.                     }
  265.                    
  266.                    
  267.                     else if(command.equals("x^2"))
  268.                     {
  269.                         double input=evaluateExpression(display1.getText());
  270.                         display2.setText(Double.toString(input*input));
  271.                     }
  272.                    
  273.                     else if(command.equals("x^3"))
  274.                     {
  275.                         double input=evaluateExpression(display1.getText());
  276.                         display2.setText(Double.toString(input*input*input));
  277.                     }
  278.                    
  279.                     else if(command.equals("sqrt"))
  280.                     {
  281.                         double input=evaluateExpression(display1.getText());
  282.                         display2.setText(Double.toString(Math.sqrt(input)));
  283.                     }
  284.                     else if(command.equals("="))
  285.                     {
  286.                         String input=display1.getText();
  287.                         System.out.println(input);
  288.                         display2.setText(Double.toString(evaluateExpression(input)));                          
  289.                     }
  290.                     else if(command.equals("ANS"))
  291.                     {
  292.                         String answer=display1.getText();
  293.                         char last=answer.charAt(answer.length()-1);
  294.                         if(Character.isDigit(last)||last==')'||last=='(')
  295.                             display1.setText(display2.getText());
  296.                         else
  297.                             display1.setText(display1.getText()+display2.getText());
  298.                     }
  299.                     else if(command.equals("1/x"))
  300.                     {
  301.                         double input=evaluateExpression(display1.getText());
  302.                         display2.setText(Double.toString(1/input));
  303.                     }
  304.                     else
  305.                     {
  306.                         display1.setText(display1.getText()+command);
  307.                     }
  308.                 }
  309.                 catch (Exception ex)
  310.                 {
  311.                     ex.printStackTrace();
  312.                 }
  313.  
  314.                
  315.             }
  316.            
  317.             //Expression Evaluator
  318.             Double evaluateExpression (String expression) throws Exception
  319.             {  
  320.                 System.out.println(expression);
  321.                 return (Double) engine.eval(expression);
  322.             }
  323.         }
  324.        
  325.        
  326.        
  327. }
  328.  
  329. ============================================================================================
  330.  
  331. //Calculator.java
  332. //MainClass
  333.  
  334. import java.awt.EventQueue;
  335.  
  336. import javax.swing.JFrame;
  337.  
  338.  
  339. public class Calculator {
  340.  
  341.     public static void main(String arg[])
  342.     {
  343.         EventQueue.invokeLater(new Runnable()
  344.         {
  345.             public void run()
  346.             {
  347.                 CalculatorFrame calculator=new CalculatorFrame();
  348.                 calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  349.                 calculator.setVisible(true);
  350.             }
  351.         });
  352.     }
  353.    
  354. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement