package Calculator;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
public class Main{
String input = "";
public static void main(String[] args){
Operator Operator = new Operator();
Solve Solve = new Solve();
Main obj = new Main();
JFrame calc = new JFrame("Calculator");
JTextArea hello = new JTextArea(1,1);
calc.add(hello);
calc.setSize(220, 420);
calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calc.setLayout(null);
JButton buttonoutput = new JButton(obj.input);
buttonoutput.setBounds(0, 0, 200, 70);
calc.add(buttonoutput);
JButton buttonAC = new JButton("AC");
buttonAC.setBounds(0, 70, 50, 50);
JButton buttonparentheses1 = new JButton("(");
buttonparentheses1.setBounds(50, 70, 38, 50);
JButton buttonparentheses2 = new JButton(")");
buttonparentheses2.setBounds(75, 70, 38, 50);
JButton buttonpercent = new JButton("%");
buttonpercent.setBounds(100, 70, 50, 50);
JButton buttondivide = new JButton("/");
buttondivide.setBounds(150, 70, 50, 50);
JButton button1 = new JButton("1");
button1.setBounds(0, 120, 50, 50);
JButton button2 = new JButton("2");
button2.setBounds(50, 120, 50, 50);
JButton button3 = new JButton("3");
button3.setBounds(100, 120, 50, 50);
JButton buttonmultiply = new JButton("x");
buttonmultiply.setBounds(150, 120, 50, 50);
JButton button4 = new JButton("4");
button4.setBounds(0, 170, 50, 50);
JButton button5 = new JButton("5");
button5.setBounds(50, 170, 50, 50);
JButton button6 = new JButton("6");
button6.setBounds(100, 170, 50, 50);
JButton buttonsubract = new JButton("-");
buttonsubract.setBounds(150, 170, 50, 50);
JButton button7 = new JButton("7");
button7.setBounds(0, 220, 50, 50);
JButton button8 = new JButton("8");
button8.setBounds(50, 220, 50, 50);
JButton button9 = new JButton("9");
button9.setBounds(100, 220, 50, 50);
JButton buttonadd = new JButton("+");
buttonadd.setBounds(150, 220, 50, 50);
JButton button0 = new JButton("0");
button0.setBounds(0, 270, 50, 50);
JButton buttondecimalpoint = new JButton(".");
buttondecimalpoint.setBounds(50, 270, 50, 50);
JButton buttonbackspace = new JButton("<<");
buttonbackspace.setBounds(100, 270, 50, 50);
JButton buttonequals = new JButton("=");
buttonequals.setBounds(150, 270, 50, 50);
calc.add(buttonAC);
buttonAC.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input = "";
buttonoutput.setText(obj.input);
}
});
calc.add(buttonparentheses1);
calc.add(buttonparentheses2);
calc.add(buttonpercent);
calc.add(buttondivide);
calc.add(button1);
calc.add(button2);
calc.add(button3);
calc.add(buttonmultiply);
calc.add(button4);
calc.add(button5);
calc.add(button6);
calc.add(buttonsubract);
calc.add(button7);
calc.add(button8);
calc.add(button9);
calc.add(buttonadd);
//Numbers
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "1";
buttonoutput.setText(obj.input);
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "2";
buttonoutput.setText(obj.input);
}
});
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "3";
buttonoutput.setText(obj.input);
}
});
button4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "4";
buttonoutput.setText(obj.input);
}
});
button5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "5";
buttonoutput.setText(obj.input);
}
});
button6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "6";
buttonoutput.setText(obj.input);
}
});
button7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "7";
buttonoutput.setText(obj.input);
}
});
button8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "8";
buttonoutput.setText(obj.input);
}
});
button9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "9";
buttonoutput.setText(obj.input);
}
});
button0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "0";
buttonoutput.setText(obj.input);
}
});
//Other
buttondecimalpoint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += ".";
buttonoutput.setText(obj.input);
}
});
buttonparentheses1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "(";
buttonoutput.setText(obj.input);
}
});
buttonparentheses2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += ")";
buttonoutput.setText(obj.input);
}
});
buttonpercent.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "%";
buttonoutput.setText(obj.input);
}
});
//Operators
buttonadd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "+";
buttonoutput.setText(obj.input);
}
});
buttonmultiply.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "x";
buttonoutput.setText(obj.input);
}
});
buttonsubract.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "-";
buttonoutput.setText(obj.input);
}
});
buttondivide.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input += "รท";
buttonoutput.setText(obj.input);
}
});
calc.add(button0);
calc.add(buttondecimalpoint);
//BackSpace
calc.add(buttonbackspace);
buttonbackspace.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.input = obj.input.substring(0,obj.input.length()-1);
buttonoutput.setText(obj.input);
}
});
//Equal Button
calc.add(buttonequals);
calc.setVisible(true);
buttonequals.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
//MDAS
String result = "";
if (!((obj.input.contains("(")) || (obj.input.contains(")")))) {
//MDAS
result = Solve.MDAS(obj.input);
obj.input = result;
buttonoutput.setText(obj.input);
}
else {
//PEMDAS
result = Solve.PEMDAS(obj.input);
obj.input = result;
buttonoutput.setText(obj.input);
}
}catch(NumberFormatException error) {
buttonoutput.setText("Error");
System.out.println(error);
}catch(NullPointerException error) {
buttonoutput.setText("Error");
System.out.println(error);
}catch(ArrayIndexOutOfBoundsException error) {
buttonoutput.setText("Error: "+error);
System.out.println(error);
}catch(Exception error) {
buttonoutput.setText("Error: "+error);
System.out.println(error);
}
}
});
}
}