import java.awt.*;
import java.applet.Applet;
import javax.swing.*;
import java.awt.event.*;
public class Calculator extends Applet implements Runnable, ActionListener{
JButton[] buttons = new JButton[12];
JButton[] operButtons = new JButton[8];
JButton[] deleteButtons = new JButton[3];
JLabel display = new JLabel();
String result = "";
String operation = "";
String currentValue = "first";
Double valueDouble = 0.0;
Double firstValueDouble = 0.0;
Boolean startNew = false;
//constructor
public Calculator(){
Font font = new Font("Serif", Font.BOLD, 36);
int gapX = 10;
int gapY = 10;
int width = 60;
int height = 60;
display.setBounds(0, 0, 5*width + 4*gapX, height);
display.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.black));
display.setHorizontalAlignment(JLabel.RIGHT);
display.setFont(font);
int i;
deleteButtons[0] = new JButton ("Backspace");
deleteButtons[1] = new JButton ("CE");
deleteButtons[2] = new JButton ("C");
for (i=0; i <= 2; i++) {
deleteButtons[i].setMargin(new Insets(0,0,0,0));
deleteButtons[i].addActionListener(this);
deleteButtons[i].setFont(font);
if (i == 0){
deleteButtons[i].setBounds(0, height + gapY, 3*width + 2*gapX, height);
} else {
// deleteButtons[i].setBounds(4*width + (i-1)*(width+gapX), height+gapY, width, height);
deleteButtons[i].setBounds(3*(width+gapX) + (i-1)*(width+gapX), height+gapY, width, height);
}
}
int j = 1; // auxiliary variable;
for (i = 1; i<=12; i++ ){
if (i <= 10) {
buttons[i-1] = new JButton(String.valueOf(i % 10));
} else {
switch (i) {
case 11: buttons[i-1] = new JButton("."); break;
case 12: buttons[i-1] = new JButton("+/-"); break;
}
}
buttons[i-1].setMargin(new Insets(0,0,0,0));
buttons[i-1].addActionListener(this);
buttons[i-1].setBounds(((width+gapX) * (i-1)) % (3*(width+gapX)),
(2*height + 2*gapY) + ((height+gapY) * (j-1)),
width,
height);
buttons[i-1].setFont(font);
if (i % 3 == 0) j++;
}
j = 0;
for (i = 0; i < 8; i++ ){
switch (i) {
case 0: operButtons[i] = new JButton("/"); break;
case 1: operButtons[i] = new JButton("*"); break;
case 2: operButtons[i] = new JButton("-"); break;
case 3: operButtons[i] = new JButton("+"); break;
case 4: operButtons[i] = new JButton("sqr"); break;
case 5: operButtons[i] = new JButton("%"); break;
case 6: operButtons[i] = new JButton("1/x"); break;
case 7: operButtons[i] = new JButton("="); break;
}
operButtons[i].setMargin(new Insets(0,0,0,0));
operButtons[i].setBounds((3*(width+gapX)) + (width+gapX) * j ,
(2*height+2*gapY) + (((height+gapY) * i) % (4*(height+gapY))),
width,
height);
operButtons[i].addActionListener(this);
operButtons[i].setFont(font);
if ((i+1) % 4 == 0) j++;
}
}
public void init(){
setLayout(null);
add(display);
for (int i=0; i <= 2; i++) add(deleteButtons[i]);
for (int i = 0; i<=11; i++ ) add(buttons[i]);
for (int i = 0; i < 8; i++ ) add(operButtons[i]);
display.setText("0");
}
public static void main(String[] args) {
System.out.println("Hello World!");
}
//overridden run method
public void run() {
repaint(); //calls the repaint method
}
public void actionPerformed(ActionEvent event){
Object src = event.getSource();
if (src instanceof JButton) {
// if number is pressed
for (int i = 0; i<=9; i++ ){
if (src == buttons[i]){
if (startNew){
result = String.valueOf((i+1) % 10);
} else {
result += String.valueOf((i+1) % 10);
}
showCalculation(result);
valueDouble = Double.valueOf(result);
startNew = false;
}
}
if (src == buttons[10]) { // .
if (startNew){
result = "0.";
showCalculation(result);
} else {
if (result.indexOf(".",0) < 0) {
result += ".";
showCalculation(result);
valueDouble = Double.valueOf(result);
}
}
startNew = false;
}
if (src == buttons[11]) { // +/-
if (currentValue.equals("second")){
valueDouble = 0.0 - Double.valueOf(result);
result = String.valueOf(valueDouble);
showCalculation(result);
} else {
firstValueDouble = 0.0 - Double.valueOf(result);
result = String.valueOf(firstValueDouble);
showCalculation(result);
}
}
if (src == operButtons[0]) {
operationBegins("/");
startNew = true;
}
if (src == operButtons[1]) {
operationBegins("*");
startNew = true;
}
if (src == operButtons[2]) {
operationBegins("-");
}
if (src == operButtons[3]) {
operationBegins("+");
startNew = true;
}
if (src == operButtons[4]) { // sqrt
valueDouble = Double.valueOf(result);
valueDouble = Math.sqrt(valueDouble);
result = String.valueOf(valueDouble);
showCalculation(result);
startNew = true;
}
if (src == operButtons[5]) { // %
operationBegins("%");
startNew = true;
}
if (src == operButtons[6]) { // 1/x
valueDouble = Double.valueOf(result);
valueDouble = 1 / valueDouble;
result = String.valueOf(valueDouble);
showCalculation(result);
startNew = true;
}
if (src == operButtons[7]) { // equals sign =
if (operation.equals("")){
firstValueDouble = Double.valueOf(result);
}
//if (currentValue.equals("second")){
if (operation.equals("/")){
firstValueDouble = firstValueDouble / valueDouble;
} else if (operation.equals("*")){
firstValueDouble = firstValueDouble * valueDouble;
} else if (operation.equals("-")){
firstValueDouble = firstValueDouble - valueDouble;
} else if (operation.equals("+")){
firstValueDouble = firstValueDouble + valueDouble;
} else if (operation.equals("%")){
firstValueDouble = firstValueDouble % valueDouble;
}
result = String.valueOf(firstValueDouble);
showCalculation(result);
currentValue = "first";
startNew = true;
//}
}
if (src == deleteButtons[0]) { //backspace
if (result.length() == 1){
result = "";
display.setText("0");
} else {
result = result.substring(0, result.length()-1);
showCalculation(result);
}
if (currentValue.equals("first")){
firstValueDouble = Double.valueOf(result);
} else {
valueDouble = Double.valueOf(result);
}
}
if (src == deleteButtons[1]) { // "CE" Clears the last typed value
valueDouble = 0.0;
showCalculation("0");
startNew = true;
}
if (src == deleteButtons[2]) { //Clear All "C"
result = "";
operation = "";
valueDouble = 0.0;
firstValueDouble = 0.0;
currentValue = "first";
display.setText("0");
startNew = true;
}
}
}
private void toTheTemp(){
firstValueDouble = Double.valueOf(result);
valueDouble = 0.0;
result = String.valueOf(valueDouble);
showCalculation(result);
}
//method to remeber which operation is performed
private void operationBegins(String oper){
valueDouble = Double.valueOf(result);
firstValueDouble = valueDouble;
operation = oper;
currentValue = "second";
startNew = true;
}
private void showCalculation(String res){ // display the result
if ((res.length() > 2) && (res.substring(res.length()-2, res.length()).equals(".0"))){
res = res.substring(0,res.length()-2);
} else if (res.equals("-")){
res = "0";
} else if (res.equals(".")){
res = "0.";
}
result = res;
display.setText(res);
}
}