Calculator swing


Program

import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Main extends JFrame implements ActionListener { private JTextField display; private double result = 0.0; private char operator = ' '; private String currentNumber = ""; public Main() { super("Adi's Calculator"); display = new JTextField(20); display.setEditable(false); display.setPreferredSize(new Dimension(0, 50)); add(display, BorderLayout.NORTH); String labels[] = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", ".", "0", "%", "/", "C", "="}; JPanel buttonsPanel = new JPanel(new GridLayout(5, 4)); JButton[] buttons = new JButton[labels.length]; for (int i = 0; i < labels.length; i++) { buttons[i] = new JButton(labels[i]); buttons[i].addActionListener(this); buttonsPanel.add(buttons[i]); } add(buttonsPanel, BorderLayout.CENTER); } public static void main(String[] args) { Main calc = new Main(); calc.setDefaultCloseOperation(EXIT_ON_CLOSE); calc.setSize(300, 350); calc.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); switch (label) { case "C" -> clear(); case "." -> handleDotPress(); case "+", "-", "*", "/", "%" -> handleOperatorPress(label.charAt(0)); case "=" -> handleEqualsPress(); default -> handleNumberPress(label); } } private void clear() { display.setText(""); result = 0.0; operator = ' '; currentNumber = ""; } private void handleDotPress() { if (!currentNumber.isEmpty()) currentNumber += "."; display.setText(currentNumber); } private void handleOperatorPress(char opr) { if (currentNumber.isEmpty()) return; if (operator != ' ') handleEqualsPress(); result = Double.parseDouble(currentNumber); operator = opr; currentNumber = ""; } private void handleNumberPress(String num) { currentNumber += num; display.setText(currentNumber); } private void handleEqualsPress() { if (currentNumber.isEmpty()) return; double number = Double.parseDouble(currentNumber); switch (operator) { case '+' -> result += number; case '-' -> result -= number; case '*' -> result *= number; case '/' -> result /= number; case '%' -> result %= number; } currentNumber = Double.toString(result); operator = ' '; result = 0.0; display.setText(currentNumber); } }