The perfect place for easy learning...

Java Programming Language

×

List of Programs


Java Practical Programs


Aim


Write a Java program that works as a simple calculator. Use a grid layout to arrange buttons for the digits and for the +, -,*, % operations. Add a text field to display the result. Handle any possible exceptions like divided by zero.

Implementation


Java Program
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
    
class BuildCalculator extends JFrame implements ActionListener{
        JFrame actualWindow;
        JPanel resultPanel, buttonPanel, infoPanel;
        
        JTextField resultTxt;
        JButton btn_digits[] = new JButton[10];
        JButton btn_plus, btn_minus, btn_mul, btn_div, btn_equal, btn_dot, btn_clear; 
        
        char eventFrom;
        
        JLabel expression, appTitle, siteTitle ;
        
        double oparand_1 = 0, operand_2 = 0;
        String operator = "=";
        
        BuildCalculator() {
            Font txtFont = new Font("SansSerif", Font.BOLD, 20);
            Font titleFont = new Font("SansSerif", Font.BOLD, 30);
            Font expressionFont = new Font("SansSerif", Font.BOLD, 15);
            
            actualWindow = new JFrame("Calculator");
            resultPanel = new JPanel();
            buttonPanel = new JPanel();
            infoPanel = new JPanel();
            
            actualWindow.setLayout(new GridLayout(3, 1));
            buttonPanel.setLayout(new GridLayout(4, 4));
            infoPanel.setLayout(new GridLayout(3, 1));
            actualWindow.setResizable(false);
            
            
            appTitle = new JLabel("My Calculator");
            appTitle.setFont(titleFont);
            expression = new JLabel("Expression shown here");
            expression.setFont(expressionFont);
            siteTitle = new JLabel("www.btechsmartclass.com");
            siteTitle.setFont(expressionFont);
            siteTitle.setHorizontalAlignment(SwingConstants.CENTER);
            siteTitle.setForeground(Color.BLUE);
            
            resultTxt = new JTextField(15);
            resultTxt.setBorder(null);
            resultTxt.setPreferredSize(new Dimension(15, 50));
            resultTxt.setFont(txtFont);
            resultTxt.setHorizontalAlignment(SwingConstants.RIGHT);
            
            for(int i = 0; i < 10; i++) {
                btn_digits[i] = new JButton(""+i);
                btn_digits[i].addActionListener(this);
            }
            btn_plus = new JButton("+");
            btn_plus.addActionListener(this);
            btn_minus = new JButton("-");
            btn_minus.addActionListener(this);
            btn_mul = new JButton("*");
            btn_mul.addActionListener(this);
            btn_div = new JButton("/");
            btn_div.addActionListener(this);
            btn_dot = new JButton(".");
            btn_dot.addActionListener(this);
            btn_equal = new JButton("=");
            btn_equal.addActionListener(this);
            btn_clear = new JButton("Clear");
            btn_clear.addActionListener(this);
                
            resultPanel.add(appTitle);
            resultPanel.add(resultTxt);
            resultPanel.add(expression);
            for(int i = 0; i < 10; i++) {
                buttonPanel.add(btn_digits[i]);
            }
            buttonPanel.add(btn_plus);
            buttonPanel.add(btn_minus);
            buttonPanel.add(btn_mul);
            buttonPanel.add(btn_div);
            buttonPanel.add(btn_dot);
            buttonPanel.add(btn_equal);
            infoPanel.add(btn_clear);
            infoPanel.add(siteTitle);
                    
            actualWindow.add(resultPanel);
            actualWindow.add(buttonPanel);
            actualWindow.add(infoPanel);
            
            
            
            actualWindow.setSize(300, 500);
            actualWindow.setVisible(true);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            eventFrom = e.getActionCommand().charAt(0);
            String buildNumber;
            if(Character.isDigit(eventFrom)) {
                buildNumber = resultTxt.getText() + eventFrom; 
                resultTxt.setText(buildNumber);
            } else if(e.getActionCommand() == ".") {
                buildNumber = resultTxt.getText() + eventFrom; 
                resultTxt.setText(buildNumber);
            }
            else if(eventFrom != '='){
                oparand_1 = Double.parseDouble(resultTxt.getText());
                operator = e.getActionCommand();
                expression.setText(oparand_1 + " " + operator);
                resultTxt.setText("");
            } else if(e.getActionCommand() == "Clear") {
                resultTxt.setText("");
            }
            else {
                operand_2 = Double.parseDouble(resultTxt.getText());
    
                expression.setText(expression.getText() + " " + operand_2);
                switch(operator) {
                    case "+": 	resultTxt.setText(""+(oparand_1 + operand_2)); break;
                    case "-": 	resultTxt.setText(""+(oparand_1 - operand_2)); break;
                    case "*": 	resultTxt.setText(""+(oparand_1 * operand_2)); break;
                    case "/": 	try {
                                    if(operand_2 == 0) 
                                        throw new ArithmeticException();
                                    resultTxt.setText(""+(oparand_1 / operand_2)); break;
                                } catch(ArithmeticException ae) {
                                    JOptionPane.showMessageDialog(actualWindow, "Divisor can not be ZERO");
                                }
                }
            }
        }
    }
    
    public class Calculator {
        public static void main(String[] args) {
            new BuildCalculator();
        }
}

Result



   Download Source Code

Place your ad here
Place your ad here