import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
interface Calculable {
double CalculateInt(double x, double y);
}
public class Mycalc extends JFrame {
private static final long serialVersionUID = 1L;
private String number1 = "";
private String number2 = "";
private String operator = "";
JTextField jt = new JTextField("0.0 ");
public Mycalc() {
setTitle("My first Calc");
setSize(600, 750);
setLayout(null);
SetCenter(this);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addJT();
addButton();
setVisible(true);
}
void addJT() {
jt.setBounds(0, 0, 600, 150);
jt.setEditable(false);
jt.setHorizontalAlignment(JTextField.RIGHT);
jt.setBackground(new Color(100, 100, 100));
jt.setFont(new Font("宋体", Font.BOLD, 20));
add(jt);
}
void addButton() {
JButton jb_7 = new JButton("7");
jb_7.setBorder(new LineBorder(Color.BLUE, 1));
jb_7.setFont(new Font("宋体", Font.BOLD, 20));
jb_7.setBounds(0, 150, 150, 150);
jb_7.addActionListener(new NumberBtListener());
add(jb_7);
JButton jb_8 = new JButton("8");
jb_8.setBorder(new LineBorder(Color.BLUE, 1));
jb_8.setFont(new Font("宋体", Font.BOLD, 20));
jb_8.setBounds(150, 150, 150, 150);
jb_8.addActionListener(new NumberBtListener());
add(jb_8);
JButton jb_9 = new JButton("9");
jb_9.setBorder(new LineBorder(Color.BLUE, 1));
jb_9.setFont(new Font("宋体", Font.BOLD, 20));
jb_9.setBounds(300, 150, 150, 150);
jb_9.addActionListener(new NumberBtListener());
add(jb_9);
JButton jb_add = new JButton("+");
jb_add.setBounds(450, 150, 150, 150);
jb_add.setBorder(new LineBorder(Color.BLUE, 1));
jb_add.setFont(new Font("宋体", Font.BOLD, 20));
jb_add.addActionListener(new Operation());
add(jb_add);
JButton jb_4 = new JButton("4");
jb_4.setBorder(new LineBorder(Color.BLUE, 1));
jb_4.setFont(new Font("宋体", Font.BOLD, 20));
jb_4.setBounds(0, 300, 150, 150);
jb_4.addActionListener(new NumberBtListener());
add(jb_4);
JButton jb_5 = new JButton("5");
jb_5.setBorder(new LineBorder(Color.BLUE, 1));
jb_5.setFont(new Font("宋体", Font.BOLD, 20));
jb_5.setBounds(150, 300, 150, 150);
jb_5.addActionListener(new NumberBtListener());
add(jb_5);
JButton jb_6 = new JButton("6");
jb_6.setBorder(new LineBorder(Color.BLUE, 1));
jb_6.setFont(new Font("宋体", Font.BOLD, 20));
jb_6.setBounds(300, 300, 150, 150);
jb_6.addActionListener(new NumberBtListener());
add(jb_6);
JButton jb_cut = new JButton("-");
jb_cut.setBounds(450, 300, 150, 150);
jb_cut.setBorder(new LineBorder(Color.BLUE, 1));
jb_cut.setFont(new Font("宋体", Font.BOLD, 20));
jb_cut.addActionListener(new Operation());
add(jb_cut);
JButton jb_1 = new JButton("1");
jb_1.setBorder(new LineBorder(Color.BLUE, 1));
jb_1.setFont(new Font("宋体", Font.BOLD, 20));
jb_1.setBounds(0, 450, 150, 150);
jb_1.addActionListener(new NumberBtListener());
add(jb_1);
JButton jb_2 = new JButton("2");
jb_2.setBorder(new LineBorder(Color.BLUE, 1));
jb_2.setFont(new Font("宋体", Font.BOLD, 20));
jb_2.setBounds(150, 450, 150, 150);
jb_2.addActionListener(new NumberBtListener());
add(jb_2);
JButton jb_3 = new JButton("3");
jb_3.setBorder(new LineBorder(Color.BLUE, 1));
jb_3.setFont(new Font("宋体", Font.BOLD, 20));
jb_3.setBounds(300, 450, 150, 150);
jb_3.addActionListener(new NumberBtListener());
add(jb_3);
JButton jb_ride = new JButton("*");
jb_ride.setBounds(450, 450, 150, 150);
jb_ride.setBorder(new LineBorder(Color.BLUE, 1));
jb_ride.setFont(new Font("宋体", Font.BOLD, 20));
jb_ride.addActionListener(new Operation());
add(jb_ride);
JButton jb_0 = new JButton("0");
jb_0.setBorder(new LineBorder(Color.BLUE, 1));
jb_0.setFont(new Font("宋体", Font.BOLD, 20));
jb_0.setBounds(0, 600, 150, 150);
jb_0.addActionListener(new NumberBtListener());
add(jb_0);
JButton jb_equal = new JButton("=");
jb_equal.setBounds(150, 600, 150, 150);
jb_equal.setBorder(new LineBorder(Color.BLUE, 1));
jb_equal.setFont(new Font("宋体", Font.BOLD, 20));
jb_equal.addActionListener(new ClearOrEqual());
add(jb_equal);
JButton jb_C = new JButton("C");
jb_C.setBounds(300, 600, 150, 150);
jb_C.setBorder(new LineBorder(Color.BLUE, 1));
jb_C.setFont(new Font("宋体", Font.BOLD, 20));
jb_C.addActionListener(new ClearOrEqual());
add(jb_C);
JButton jb_divide = new JButton("/");
jb_divide.setBounds(450, 600, 150, 150);
jb_divide.setBorder(new LineBorder(Color.BLUE, 1));
jb_divide.setFont(new Font("宋体", Font.BOLD, 20));
jb_divide.addActionListener(new Operation());
add(jb_divide);
}
public static void main(String[] args) {
new Mycalc();
}
void SetCenter(Component cp) {
Dimension dim =
Toolkit.getDefaultToolkit().getScreenSize();
int screenheight = dim.height;
int screenwidth = dim.width;
int x = (screenwidth - cp.getWidth()) / 2;
int y = (screenheight - cp.getHeight()) / 2;
cp.setLocation(x, y);
}
class NumberBtListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton jbt = (JButton) e.getSource();
String content = jbt.getText();
if (!operator.equals("")) {
number1 += content;
int number = Integer.valueOf(number1);
jt.setText(number + " ");
} else {
number2 += content;
int number = Integer.valueOf(number2);
jt.setText(number + " ");
}
}
}
class ClearOrEqual implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton jbt = (JButton) e.getSource();
String content = jbt.getText();
double number = 0;
double num1 = Double.parseDouble(number1);
double num2 = Double.parseDouble(number2);
Calculable cal = Calculate(operator);
switch (content) {
case "=": {
if (!(operator.equals("") && number2.equals(""))) {
number = cal.CalculateInt(num1, num2);
number1 = String.valueOf(number);
jt.setText(number + " ");
}
}
break;
case "C": {
jt.setText("0");
number1 = "";
number2 = "";
operator = "";
}
break;
}
}
}
class Operation implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton jbt = (JButton) e.getSource();
String content = jbt.getText();
operator = content;
number2 = "";
}
}
public static Calculable Calculate(String str) {
Calculable result;
switch (str) {
case "+": {
result = (x, y) -> (x + y);
}
break;
case "-": {
result = (x, y) -> (x - y);
}
break;
case "*": {
result = (x, y) -> (x * y);
}
break;
case "/": {
result = (x, y) -> (x / y);
}
break;
}
return result;
}
}