Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
4 views

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
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

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
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