0% found this document useful (0 votes)
11 views4 pages

CALCULATOR sample Java program GUI

The document is a Java program that creates a graphical calculator using Swing. It includes features such as number and operation buttons, a display for the current equation, and a result field. The program evaluates mathematical expressions using JavaScript's scripting engine and provides a user-friendly interface with hover effects on buttons.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views4 pages

CALCULATOR sample Java program GUI

The document is a Java program that creates a graphical calculator using Swing. It includes features such as number and operation buttons, a display for the current equation, and a result field. The program evaluates mathematical expressions using JavaScript's scripting engine and provides a user-friendly interface with hover effects on buttons.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

import java.awt.

*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Cal {


private static JTextField equationField;
private static JTextField resultField;
private static String currentInput = "";

public static void main(String[] args) {


JFrame frame = new JFrame("Calculator");
frame.setSize(450, 500);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setResizable(false);
frame.getContentPane().setBackground(Color.decode("#ac94f4"));

JPanel mainPanel = new JPanel();


mainPanel.setBounds(10, 10, 400, 500);
mainPanel.setLayout(null);
mainPanel.setBackground(Color.decode("#ac94f4"));
frame.add(mainPanel);

Font equField = new Font("Arial", Font.BOLD, 18);


Font resField = new Font("Arial", Font.BOLD, 28);
Font font = new Font("Arial", Font.BOLD, 20);
Font fontBig = new Font("Arial", Font.BOLD, 20);

// Equation field (top)


equationField = new JTextField();
equationField.setEditable(false);
equationField.setBackground(Color.decode("#f8e2ff"));
equationField.setForeground(Color.decode("#8A6DD9"));
equationField.setBounds(55, 120, 235, 40);

equationField.setBorder(BorderFactory.createLineBorder(Color.decode("#f8e2ff"),
1));
equationField.setFont(equField);
equationField.setHorizontalAlignment(JTextField.LEFT);
mainPanel.add(equationField);

// Result field (bottom)


resultField = new JTextField();
resultField.setEditable(false);
resultField.setBackground(Color.decode("#f8e2ff"));
resultField.setForeground(Color.decode("#7151d0"));
resultField.setBounds(55, 160, 235, 40);

resultField.setBorder(BorderFactory.createLineBorder(Color.decode("#f8e2ff"), 1));
resultField.setFont(resField);
resultField.setHorizontalAlignment(JTextField.RIGHT);
mainPanel.add(resultField);

JButton clear = new JButton("CLR");


configureButton(clear);
clear.setFont(font);
clear.setBounds(295, 120, 75, 80);
clear.setFocusable(false);
mainPanel.add(clear);
addHoverEffect(clear);

// Add action listeners to buttons


clear.addActionListener(e -> {
currentInput = "";
equationField.setText("");
resultField.setText("");
});

JButton[] numberButtons = new JButton[10];


for (int i = 0; i < 10; i++) {
numberButtons[i] = new JButton(String.valueOf(i));
configureButton(numberButtons[i]);
numberButtons[i].setFont(font);
numberButtons[i].setFocusable(false);
addHoverEffect(numberButtons[i]);
final int number = i;
numberButtons[i].addActionListener(e -> {
currentInput += number;
equationField.setText(currentInput);
});
}

// Position number buttons


numberButtons[1].setBounds(135, 205, 75, 45);
numberButtons[4].setBounds(135, 255, 75, 45);
numberButtons[7].setBounds(135, 305, 75, 45);
numberButtons[0].setBounds(135, 355, 75, 45);
numberButtons[2].setBounds(215, 205, 75, 45);
numberButtons[5].setBounds(215, 255, 75, 45);
numberButtons[8].setBounds(215, 305, 75, 45);
numberButtons[3].setBounds(295, 205, 75, 45);
numberButtons[6].setBounds(295, 255, 75, 45);
numberButtons[9].setBounds(295, 305, 75, 45);

for (JButton button : numberButtons) {


mainPanel.add(button);
}

JButton dot = new JButton(".");


configureButton2(dot);
dot.setFont(fontBig);
dot.setBounds(215, 355, 75, 45);
dot.setFocusable(false);
mainPanel.add(dot);
addHoverEffect(dot);
dot.addActionListener(e -> {
if (!currentInput.contains(".")) {
currentInput += ".";
equationField.setText(currentInput);
}
});

JButton[] operationButtons = new JButton[4];


String[] operations = {"+", "-", "x", "/"};
for (int i = 0; i < 4; i++) {
operationButtons[i] = new JButton(operations[i]);
configureButton(operationButtons[i]);
operationButtons[i].setFont(font);
operationButtons[i].setFocusable(false);
addHoverEffect(operationButtons[i]);
final String operation = operations[i];
operationButtons[i].addActionListener(e -> {
currentInput += " " + operation + " ";
equationField.setText(currentInput);
});
}

// Position operation buttons


operationButtons[0].setBounds(55, 205, 75, 45); // +
operationButtons[1].setBounds(55, 255, 75, 45); // -
operationButtons[2].setBounds(55, 305, 75, 45); // x
operationButtons[3].setBounds(55, 355, 75, 45); // /

for (JButton button : operationButtons) {


mainPanel.add(button);
}

JButton equal = new JButton("=");


configureButton(equal);
equal.setFont(font);
equal.setBounds(295, 355, 75, 45);
equal.setFocusable(false);
mainPanel.add(equal);
addHoverEffect(equal);
equal.addActionListener(e -> {
try {
// Replace 'x' with '*' for evaluation
String expression = currentInput.replace("x", "*");
double result = evaluateExpression(expression);
resultField.setText(formatNumber(result));
} catch (Exception ex) {
resultField.setText("Error");
}
});

frame.setVisible(true);
}

// Method to evaluate the expression


private static double evaluateExpression(String expression) throws
ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
return (double) engine.eval(expression);
}

private static String formatNumber(double number) {


if (number == (long) number) {
return String.format("%d", (long) number);
} else {
return String.format("%s", number);
}
}
private static void addHoverEffect(JButton button) {
button.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
button.setBackground(Color.decode("#8A6DD9"));
}

public void mouseExited(java.awt.event.MouseEvent evt) {


button.setBackground(Color.decode("#7151d0"));
}
});
}

private static void configureButton(JButton button) {


button.setBackground(Color.decode("#7151d0"));
button.setForeground(Color.WHITE);
button.setOpaque(true);
button.setBorder(BorderFactory.createLineBorder(Color.decode("#7151d0"),
1));
}

private static void configureButton2(JButton button) {


button.setBackground(Color.decode("#7151d0"));
button.setForeground(Color.WHITE);
button.setOpaque(true);
button.setBorder(BorderFactory.createLineBorder(Color.decode("#7151d0"),
1));
}
}

You might also like