Simple Calculator
Java Swing program that functions as a basic calculator. The calculator supports digits (0-9) and operations (+, -, *, /), and includes a text field to display the result. It also handles exceptions such as division by zero.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SimpleCalculator extends JFrame implements ActionListener {
private JTextField display;
private double num1, num2, result;
private char operator;
public SimpleCalculator() {
// Create the display field
display = new JTextField();
display.setEditable(false);
display.setFont(new Font("Arial", Font.BOLD, 24));
add(display, BorderLayout.NORTH);
// Create the panel for buttons
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 4, 5, 5));
add(buttonPanel, BorderLayout.CENTER);
// Add buttons for digits and operations
String[] buttonLabels = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", "C", "=", "+"
};
for (String label : buttonLabels) {
JButton button = new JButton(label);
button.setFont(new Font("Arial", Font.BOLD, 20));
button.addActionListener(this);
buttonPanel.add(button);
}
// Set up the frame
setTitle("Simple Calculator");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.charAt(0) >= '0' && command.charAt(0) <= '9') {
display.setText(display.getText() + command);
} else if (command.charAt(0) == 'C') {
display.setText("");
} else if (command.charAt(0) == '=') {
try {
num2 = Double.parseDouble(display.getText());
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 == 0) {
throw new ArithmeticException("Cannot divide by zero");
}
result = num1 / num2;
break;
}
display.setText(String.valueOf(result));
} catch (ArithmeticException ex) {
display.setText("Error: " + ex.getMessage());
} catch (NumberFormatException ex) {
display.setText("Invalid input");
}
} else {
try {
num1 = Double.parseDouble(display.getText());
operator = command.charAt(0);
display.setText("");
} catch (NumberFormatException ex) {
display.setText("Invalid input");
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(SimpleCalculator::new);
}
}
Imports
JFrame, JPanel, JButton, and JTextField.ActionEvent and ActionListener.Class Definition
SimpleCalculator extends JFrame to create the main window of the calculator.ActionListener to handle button click events.Instance Variables
display: A JTextField to display the input and result.num1, num2, result: Variables to store the first operand, second operand, and the result of the calculation, respectively.operator: A character to store the operator (+, -, *, /) selected by the userConstructor
Creating the Display Field:
display: Initializes the text field to show input and results.setEditable(false): Ensures the user cannot edit the text field directly.setFont: Sets the font for the text field.add(display, BorderLayout.NORTH): Adds the text field to the top of the frame.
JPanel buttonPanel = new JPanel(): Initializes a panel to hold the buttons.setLayout(new GridLayout(4, 4, 5, 5)): Sets a 4x4 grid layout with spacing between buttons.add(buttonPanel, BorderLayout.CENTER): Adds the button panel to the center of the frame.
Adding Buttons:
String[] buttonLabels: Array of labels for the buttons.- Loop: Iterates over the array to create and add buttons to the panel.
button.setFont(new Font("Arial", Font.BOLD, 20)): Sets the font for each button.button.addActionListener(this): Registers the current instance as the listener for button clicks.buttonPanel.add(button): Adds each button to the button panel.
Setting Up the Frame:
setTitle("Simple Calculator"): Sets the title of the window.setSize(400, 400): Sets the size of the window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE): Ensures the application exits when the window is closed.setVisible(true): Makes the window visible.
Getting the Command:
String command = e.getActionCommand(): Retrieves the label of the button that was clicked.
Handling Digit Buttons:
if (command.charAt(0) >= '0' && command.charAt(0) <= '9'): Checks if the button is a digit.display.setText(display.getText() + command): Appends the digit to the display.
Handling Clear Button:
else if (command.charAt(0) == 'C'): Checks if the button is "C" (clear).display.setText(""): Clears the display.
Handling Equals Button:
else if (command.charAt(0) == '='): Checks if the button is "=".- Try-Catch Block: Parses the second number, performs the calculation based on the operator, and updates the display with the result. Handles
ArithmeticExceptionfor division by zero andNumberFormatExceptionfor invalid input.
Handling Operator Buttons:
else: Handles the operator buttons (+,-,*,/).- Try-Catch Block: Parses the first number, stores the operator, and clears the display for the next input. Handles
NumberFormatExceptionfor invalid input.
SwingUtilities.invokeLater: Ensures the GUI creation and updates are handled on the Event Dispatch Thread.SimpleCalculator::new: Creates an instance of the SimpleCalculator class, which initializes the GUI and makes it visible.
Comments
Post a Comment