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); } }