需要大致看一下的知识点
- java.swing包里面的各个组件
- java.awt包里面的监听器等
- javax.script包(用来将字符串里面的运算表达式)
源代码
package com.william.calculator;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.*;
public class Calculator {
public static void main(String[] args) {
String result="";
JFrame frame=new JFrame("Calculator");
Image icon=Toolkit.getDefaultToolkit().getImage("F:/image/calculator63.png");
frame.setIconImage(icon);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JTextField text_result=new JTextField(result,26);
JButton button_clear=new JButton("Clear");
text_result.setFont(new Font("宋体",Font.BOLD,24));
button_clear.setPreferredSize(new Dimension(105,20));
button_clear.setBackground(Color.RED);
JButton button0=new JButton("0");
JButton button1=new JButton("1");
JButton button2=new JButton("2");
JButton button3=new JButton("3");
JButton button4=new JButton("4");
JButton button5=new JButton("5");
JButton button6=new JButton("6");
JButton button7=new JButton("7");
JButton button8=new JButton("8");
JButton button9=new JButton("9");
JButton button_dot=new JButton(".");
JButton button_add=new JButton("+");
JButton button_subtract=new JButton("-");
JButton button_multiply=new JButton("*");
JButton button_divide=new JButton("/");
JButton button_calculator=new JButton("=");
button_calculator.setBackground(Color.GREEN);
JPanel p=new JPanel(new GridLayout(4,4,20,20));
p.setPreferredSize(new Dimension(500,300));
p.add(button7);
p.add(button8);
p.add(button9);
p.add(button_divide);
p.add(button4);
p.add(button5);
p.add(button6);
p.add(button_multiply);
p.add(button1);
p.add(button2);
p.add(button3);
p.add(button_subtract);
p.add(button0);
p.add(button_dot);
p.add(button_calculator);
p.add(button_add);
p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JPanel p2=new JPanel();
p2.setPreferredSize(new Dimension(500,80));
p2.setLayout(new BorderLayout());
p2.add(text_result,BorderLayout.WEST);
p2.add(button_clear, BorderLayout.EAST);
p2.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
frame.setLocation(0, 200);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(p2, BorderLayout.NORTH);
frame.getContentPane().add(p, BorderLayout.SOUTH);
frame.pack();
frame.setResizable(true);
frame.setVisible(true);
class inputListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String s=((JButton)e.getSource()).getText();
if(s!="=") {
text_result.setText(text_result.getText()+s);
}
else
text_result.setText(s);
}
}
class clearListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
text_result.setText("");
}
}
class calculatorListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
ScriptEngine jse=new ScriptEngineManager().getEngineByName("JavaScript");
String s=text_result.getText();
try {
if(jse.eval(s) instanceof Integer) {
text_result.setText(String.valueOf(jse.eval(s)));
}
else {
text_result.setText(String.format("%.3f", jse.eval(s)));
}
}catch(Exception t) {
System.out.println(t.getMessage());
}
}
}
button7.addActionListener(new inputListener());
button8.addActionListener(new inputListener());
button9.addActionListener(new inputListener());
button1.addActionListener(new inputListener());
button2.addActionListener(new inputListener());
button3.addActionListener(new inputListener());
button4.addActionListener(new inputListener());
button5.addActionListener(new inputListener());
button6.addActionListener(new inputListener());
button0.addActionListener(new inputListener());
button_dot.addActionListener(new inputListener());
button_add.addActionListener(new inputListener());
button_subtract.addActionListener(new inputListener());
button_multiply.addActionListener(new inputListener());
button_divide.addActionListener(new inputListener());
button_clear.addActionListener(new clearListener());
button_calculator.addActionListener(new calculatorListener());
}
}
运行效果