Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.lang.Math;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- /**
- *Semi-Scientific Calculator
- *@author Steve Robinson
- *@version 1.1
- *@see footyntech.wordpress.com
- */
- //Main Frame of the App
- public class CalculatorFrame extends JFrame {
- public CalculatorFrame()
- {
- setTitle("My Scientific Calculator");
- CalculatorPanel calcPanel=new CalculatorPanel();
- add(calcPanel);
- pack();
- }
- }
- class CalculatorPanel extends JPanel
- {
- private JTextField display1;
- private JTextField display2;
- private JPanel buttonPanel;
- private JPanel displayPanel;
- ActionListener listener=new CalculatorListener();
- ActionListener displayListener=new DisplayListener();
- //Helper Methods to add buttons. Thanks to Core Java V1 book for this wonderful idea!
- void addDisplayButton(String type)
- {
- JButton button=new JButton(type);
- button.addActionListener(displayListener);
- buttonPanel.add(button);
- }
- void addCalcButton(String type)
- {
- JButton button=new JButton(type);
- button.addActionListener(listener);
- buttonPanel.add(button);
- }
- public CalculatorPanel()
- {
- //Layout for Main Calculator Panel
- setLayout(new BorderLayout());
- //Display Panel
- displayPanel=new JPanel();
- displayPanel.setLayout(new GridLayout(2,1));
- display1=new JTextField("");
- displayPanel.add(display1);
- display2=new JTextField("");
- displayPanel.add(display2);
- display1.requestFocusInWindow();
- add(displayPanel,BorderLayout.NORTH);
- //Panel for Buttons
- buttonPanel=new JPanel();
- //ButtonLayout
- buttonPanel.setLayout(new GridLayout(8,4));
- //Button Creation
- addCalcButton("e");
- addDisplayButton("DEL");
- addDisplayButton("AC");
- addDisplayButton("OFF");
- addCalcButton("log");
- addCalcButton("sin");
- addCalcButton("tan");
- addCalcButton("cos");
- addCalcButton("%");
- addCalcButton("x\u00B2");
- addCalcButton("x\u00B3");
- addCalcButton("sqrt");
- addCalcButton("1/x");
- addCalcButton("(");
- addCalcButton(")");
- addCalcButton("ANS");
- addCalcButton("7");
- addCalcButton("8");
- addCalcButton("9");
- addCalcButton("+");
- addCalcButton("4");
- addCalcButton("5");
- addCalcButton("6");
- addCalcButton("-");
- addCalcButton("1");
- addCalcButton("2");
- addCalcButton("3");
- addCalcButton("/");
- addCalcButton("0");
- addCalcButton(".");
- addCalcButton("=");
- addCalcButton("*");
- add(buttonPanel,BorderLayout.CENTER);
- }
- ScriptEngineManager manager=new ScriptEngineManager();
- ScriptEngine engine=manager.getEngineByName("JavaScript");
- boolean opDone=false;
- private class DisplayListener implements ActionListener
- {
- public void actionPerformed(ActionEvent event)
- {
- String command=event.getActionCommand();
- if(command.equals("AC"))
- {
- display1.setText("");
- display2.setText("");
- }
- else if(command.equals("OFF"))
- {
- System.exit(0);
- }
- else if(command.equals("DEL"))
- {
- display1.setText(display1.getText().substring(0, display1.getText().length()-1));
- }
- }
- }
- private class CalculatorListener implements ActionListener
- {
- public void actionPerformed (ActionEvent event)
- {
- String command=event.getActionCommand();
- try{
- if(command.equals("log"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(Math.log(input)));
- opDone=true;
- }
- else if(command.equals("sin"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(Math.sin(input)));
- opDone=true;
- }
- else if(command.equals("tan"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(Math.tan(input)));
- opDone=true;
- }
- else if(command.equals("cos"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(Math.cos(input)));
- opDone=true;
- }
- else if(command.equals("e"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(Math.exp(input)));
- opDone=true;
- }
- else if(command.equals("x\u00B2"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(input*input));
- opDone=true;
- }
- else if(command.equals("x\u00B3"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(input*input*input));
- opDone=true;
- }
- else if(command.equals("sqrt"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(Math.sqrt(input)));
- opDone=true;
- }
- else if(command.equals("="))
- {
- String input=display1.getText();
- //System.out.println(input);
- display2.setText(Double.toString(evaluateExpression(input)));
- opDone=true;
- }
- else if(command.equals("ANS"))
- {
- if(opDone)
- {
- display1.setText(display2.getText());
- }
- else
- {
- display1.setText(display1.getText()+display2.getText());
- }
- opDone=false;
- }
- else if(command.equals("1/x"))
- {
- double input=evaluateExpression(display1.getText());
- display2.setText(Double.toString(1/input));
- opDone=true;
- }
- else
- {
- char opr=command.charAt(0);
- if(opDone)
- {
- if(Character.isDigit(opr)||opr=='.')
- {
- display1.setText(command);
- }
- else
- display1.setText(display2.getText()+command);
- }
- else
- display1.setText(display1.getText()+command);
- opDone=false;
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- }
- Double evaluateExpression (String expression) throws Exception
- {
- //System.out.println(expression);
- return (Double) engine.eval(expression);
- }
- }
- }
- /////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
- /**
- *Main Class. Contains program starting point.
- */
- import java.awt.EventQueue;
- import javax.swing.JFrame;
- public class Calculator {
- public static void main(String arg[])
- {
- EventQueue.invokeLater(new Runnable()
- {
- public void run()
- {
- CalculatorFrame calculator=new CalculatorFrame();
- calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- calculator.setVisible(true);
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement