Saturday, November 1, 2014

Scientific calculator



Scientific Calculator

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
 
class Calculator extends JFrame 
{
private final Font Bigger_Font = new        Font("monspaced",Font.Plain, 20);
    private JTextField textfield;
    private boolean number = true;
    private String equalOp = "=";
    private CalculatorOp op = new CalculatorOp();
    public Calculator() 
  {
        textfield = new JTextField("", 12);
        textfield.setHorizontalAlignment(JTextField.Right);
        textfield.setFont(Bigger_Font);
        ActionListener numberListener = new NumberListener();
        String buttonOrder = "1234567890 ";
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(4, 4, 4, 4));
        for (int i = 0; i < buttonOrder.length(); i++) 
        {
            String key = buttonOrder.substring(i, i+1);
            if (key.equals(" ")) 
            {
                buttonPanel.add(new JLabel(""));
            } 
              else 
              {
                JButton button = new JButton(key);
                button.addActionListener(numberListener);
                button.setFont(Bigger_Font);
                buttonPanel.add(button);
            }
        }
        ActionListener operatorListener = new OperatorListener();
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4, 4, 4));
        String[] opOrder = {"+", "-", "*", "/","=","C","sin","cos","log"};
        for (int i = 0; i < opOrder.length; i++) 
        {
            JButton button = new JButton(opOrder[i]);
            button.addActionListener(operatorListener);
            button.setFont(Bigger_Font);
            panel.add(button);
        }
        JPanel pan = new JPanel();
        pan.setLayout(new BorderLayout(4, 4));
        pan.add(textfield, BorderLayout.North );
        pan.add(buttonPanel , BorderLayout.Center);
        pan.add(panel , BorderLayout.East);
        this.setContentPane(pan);
        this.pack();
        this.setTitle("Calculator");
        this.setResizable(false);
    }
    private void action() 
    {
        number = true;
        textfield.setText("");
        equalOp = "=";
        op.setTotal("");
    }
    class OperatorListener implements ActionListener 
     {
    public void actionPerformed(ActionEvent e) 
    {
            String displayText = textfield.getText();
            if (e.getActionCommand().equals("sin"))
            {
                textfield.setText("" + Math.sin(Double.valueOf(displayText).doubleValue()));  
            }
             else
            if (e.getActionCommand().equals("cos"))
            {
                textfield.setText("" + Math.cos(Double.valueOf(displayText).doubleValue()));
            }
            else
            if (e.getActionCommand().equals("log"))
            {
                textfield.setText("" + Math.log(Double.valueOf(displayText).doubleValue()));
              }
            else if (e.getActionCommand().equals("C"))
            {
                textfield.setText("");
            }
             else
            {
                if (number)
                {
                    action();
                    textfield.setText("");
                  }
                else
                {
                    number = true;
                    if (equalOp.equals("="))
                    {
                        op.setTotal(displayText);
                    }

                    else
                    if (equalOp.equals("+"))
                    {
                        op.add(displayText);
                    }
                    else if (equalOp.equals("-"))
                    {
                        op.subtract(displayText);
                    }
                    else if (equalOp.equals("*"))
                    {
                        op.multiply(displayText);
                    }
                    else if (equalOp.equals("/"))
                    {
                        op.divide(displayText);
                    }
                    textfield.setText("" + op.getTotalString());
                    equalOp = e.getActionCommand();
                }
            }
        }
    }
    class NumberListener implements ActionListener 
    {
    public void actionPerformed(ActionEvent event) 
    {
            String digit = event.getActionCommand();
            if (number) 
             {
                textfield.setText(digit);
                number = false;
            }
             else 
            {
                textfield.setText(textfield.getText() + digit);
            }
        }
    }
    public class CalculatorOp 
   {
        private int total;
     public CalculatorOp() 
    {
            total = 0;
     }
     public String getTotalString()
    {
            return ""+total;
     }
     public void setTotal(String n) 
   {
            total = convertToNumber(n);
        }
        public void add(String n) 
       {
            total += convertToNumber(n);
        }
       public void subtract(String n) 
.     {
            total -= convertToNumber(n);
        }
        public void multiply(String n) 
        {
            total *= convertToNumber(n);
        }
        public void divide(String n)
        {
            total /= convertToNumber(n);
        }
        private int convertToNumber(String n)
        {
                return Integer.parseInt(n);
        }
    }
}
class SwingCalculator 
{
    public static void main(String[] args) 
   {
        JFrame frame = new Calculator();
        frame.setDefaultCloseOperation(JFrame.Exit_On_Close);
        frame.setVisible(true);
    }
}


No comments:

Post a Comment