aW1wb3J0IGphdmF4LnN3aW5nLio7CmltcG9ydCBqYXZhLmF3dC4qOwppbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CmltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKCnB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIGltcGxlbWVudHMgQWN0aW9uTGlzdGVuZXIgewogICAgcHJpdmF0ZSBKRnJhbWUgZnJhbWU7CiAgICBwcml2YXRlIEpUZXh0RmllbGQgdGV4dEZpZWxkMTsKICAgIHByaXZhdGUgSlRleHRGaWVsZCB0ZXh0RmllbGQyOwogICAgcHJpdmF0ZSBKVGV4dEZpZWxkIHJlc3VsdEZpZWxkOwogICAgcHJpdmF0ZSBKQ29tYm9Cb3gmbHQ7U3RyaW5nJmd0OyBvcGVyYXRpb25zOwogICAgcHJpdmF0ZSBKQnV0dG9uIGNvbG9yQnV0dG9uOwoKICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkgewogICAgICAgIC8vIENyZWF0ZSB0aGUgZnJhbWUKICAgICAgICBmcmFtZSA9IG5ldyBKRnJhbWUoJnF1b3Q7U2ltcGxlIENhbGN1bGF0b3ImcXVvdDspOwogICAgICAgIGZyYW1lLnNldFNpemUoNDAwLCAzMDApOwogICAgICAgIGZyYW1lLnNldERlZmF1bHRDbG9zZU9wZXJhdGlvbihKRnJhbWUuRVhJVF9PTl9DTE9TRSk7CiAgICAgICAgZnJhbWUuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KCkpOwoKICAgICAgICAvLyBDcmVhdGUgdGV4dCBmaWVsZHMKICAgICAgICB0ZXh0RmllbGQxID0gbmV3IEpUZXh0RmllbGQoMTApOwogICAgICAgIHRleHRGaWVsZDIgPSBuZXcgSlRleHRGaWVsZCgxMCk7CiAgICAgICAgcmVzdWx0RmllbGQgPSBuZXcgSlRleHRGaWVsZCgxMCk7CiAgICAgICAgcmVzdWx0RmllbGQuc2V0RWRpdGFibGUoZmFsc2UpOwoKICAgICAgICAvLyBDcmVhdGUgb3BlcmF0aW9ucyBjb21ibyBib3gKICAgICAgICBTdHJpbmdbXSBvcHMgPSB7JnF1b3Q7KyZxdW90OywgJnF1b3Q7LSZxdW90OywgJnF1b3Q7KiZxdW90OywgJnF1b3Q7LyZxdW90O307CiAgICAgICAgb3BlcmF0aW9ucyA9IG5ldyBKQ29tYm9Cb3gmbHQ7Jmd0OyhvcHMpOwoKICAgICAgICAvLyBDcmVhdGUgYSBidXR0b24gdG8gY2FsY3VsYXRlCiAgICAgICAgSkJ1dHRvbiBjYWxjdWxhdGVCdXR0b24gPSBuZXcgSkJ1dHRvbigmcXVvdDtDYWxjdWxhdGUmcXVvdDspOwogICAgICAgIGNhbGN1bGF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKCiAgICAgICAgLy8gQ3JlYXRlIGEgYnV0dG9uIHRvIGNoYW5nZSBiYWNrZ3JvdW5kIGNvbG9yCiAgICAgICAgY29sb3JCdXR0b24gPSBuZXcgSkJ1dHRvbigmcXVvdDtDaGFuZ2UgQmFja2dyb3VuZCBDb2xvciZxdW90Oyk7CiAgICAgICAgY29sb3JCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIoZSAtJmd0OyBjaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSk7CgogICAgICAgIC8vIEFkZCBjb21wb25lbnRzIHRvIGZyYW1lCiAgICAgICAgZnJhbWUuYWRkKHRleHRGaWVsZDEpOwogICAgICAgIGZyYW1lLmFkZChvcGVyYXRpb25zKTsKICAgICAgICBmcmFtZS5hZGQodGV4dEZpZWxkMik7CiAgICAgICAgZnJhbWUuYWRkKGNhbGN1bGF0ZUJ1dHRvbik7CiAgICAgICAgZnJhbWUuYWRkKGNvbG9yQnV0dG9uKTsKICAgICAgICBmcmFtZS5hZGQocmVzdWx0RmllbGQpOwoKICAgICAgICAvLyBTZXQgZnJhbWUgdmlzaWJpbGl0eQogICAgICAgIGZyYW1lLnNldFZpc2libGUodHJ1ZSk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGRvdWJsZSBudW0xID0gRG91YmxlLnBhcnNlRG91YmxlKHRleHRGaWVsZDEuZ2V0VGV4dCgpKTsKICAgICAgICAgICAgZG91YmxlIG51bTIgPSBEb3VibGUucGFyc2VEb3VibGUodGV4dEZpZWxkMi5nZXRUZXh0KCkpOwogICAgICAgICAgICBTdHJpbmcgb3BlcmF0b3IgPSBvcGVyYXRpb25zLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCk7CiAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAwOwoKICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikgewogICAgICAgICAgICAgICAgY2FzZSAmcXVvdDsrJnF1b3Q7OgogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bTEgKyBudW0yOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAmcXVvdDstJnF1b3Q7OgogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bTEgLSBudW0yOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAmcXVvdDsqJnF1b3Q7OgogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bTEgKiBudW0yOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAmcXVvdDsvJnF1b3Q7OgogICAgICAgICAgICAgICAgICAgIGlmIChudW0yID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyaXRobWV0aWNFeGNlcHRpb24oJnF1b3Q7Q2Fubm90IGRpdmlkZSBieSB6ZXJvLCB0cnkgYWdhaW4mcXVvdDspOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBudW0xIC8gbnVtMjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHRGaWVsZC5zZXRUZXh0KFN0cmluZy52YWx1ZU9mKHJlc3VsdCkpOwogICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICByZXN1bHRGaWVsZC5zZXRUZXh0KCZxdW90O0Vycm9yOiBQbGVhc2UgZW50ZXIgdmFsaWQgbnVtYmVycyZxdW90Oyk7CiAgICAgICAgfSBjYXRjaCAoQXJpdGhtZXRpY0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICByZXN1bHRGaWVsZC5zZXRUZXh0KGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBjaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSB7CiAgICAgICAgQ29sb3IgbmV3Q29sb3IgPSBKQ29sb3JDaG9vc2VyLnNob3dEaWFsb2coZnJhbWUsICZxdW90O0Nob29zZSBCYWNrZ3JvdW5kIENvbG9yJnF1b3Q7LCBmcmFtZS5nZXRCYWNrZ3JvdW5kKCkpOwogICAgICAgIGlmIChuZXdDb2xvciAhPSBudWxsKSB7CiAgICAgICAgICAgIGZyYW1lLmdldENvbnRlbnRQYW5lKCkuc2V0QmFja2dyb3VuZChuZXdDb2xvcik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBuZXcgQ2FsY3VsYXRvcigpOwogICAgfQp9
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator implements ActionListener {
private JFrame frame;
private JTextField textField1;
private JTextField textField2;
private JTextField resultField;
private JComboBox<String> operations;
private JButton colorButton;
public Calculator() {
// Create the frame
frame = new JFrame("Simple Calculator");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
// Create text fields
textField1 = new JTextField(10);
textField2 = new JTextField(10);
resultField = new JTextField(10);
resultField.setEditable(false);
// Create operations combo box
String[] ops = {"+", "-", "*", "/"};
operations = new JComboBox<>(ops);
// Create a button to calculate
JButton calculateButton = new JButton("Calculate");
calculateButton.addActionListener(this);
// Create a button to change background color
colorButton = new JButton("Change Background Color");
colorButton.addActionListener(e -> changeBackgroundColor());
// Add components to frame
frame.add(textField1);
frame.add(operations);
frame.add(textField2);
frame.add(calculateButton);
frame.add(colorButton);
frame.add(resultField);
// Set frame visibility
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double num1 = Double.parseDouble(textField1.getText());
double num2 = Double.parseDouble(textField2.getText());
String operator = operations.getSelectedItem().toString();
double result = 0;
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, try again");
}
result = num1 / num2;
break;
}
resultField.setText(String.valueOf(result));
} catch (NumberFormatException ex) {
resultField.setText("Error: Please enter valid numbers");
} catch (ArithmeticException ex) {
resultField.setText(ex.getMessage());
}
}
private void changeBackgroundColor() {
Color newColor = JColorChooser.showDialog(frame, "Choose Background Color", frame.getBackground());
if (newColor != null) {
frame.getContentPane().setBackground(newColor);
}
}
public static void main(String[] args) {
new Calculator();
}
}