📄 calculator.java
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ButtonPanel extends JPanel{
JButton buttonNumObj[]=new JButton[10];
JButton buttonAddObj;
JButton buttonMinObj;
JButton buttonMulObj;
JButton buttonDivObj;
JButton buttonDotObj;
JButton buttonEqaObj;
ACalculator aCalculatorObj=null;
ButtonPanel(ACalculator acr){
aCalculatorObj=acr;
for(int i=0;i<10;i++){
buttonNumObj[i]=new JButton(Integer.toString(i));
buttonNumObj[i].setBackground(new Color(148,176,192));
}
buttonAddObj=new JButton("+");
buttonMinObj=new JButton("-");
buttonMulObj=new JButton("×");
buttonDivObj=new JButton("÷");
buttonDotObj=new JButton(".");
buttonEqaObj=new JButton("=");
setLayout(new GridLayout(4,4));
add(buttonNumObj[7]);
add(buttonNumObj[8]);
add(buttonNumObj[9]);
add(buttonAddObj);
add(buttonNumObj[4]);
add(buttonNumObj[5]);
add(buttonNumObj[6]);
add(buttonMinObj);
add(buttonNumObj[1]);
add(buttonNumObj[2]);
add(buttonNumObj[3]);
add(buttonMulObj);
add(buttonNumObj[0]);
add(buttonDotObj);
add(buttonEqaObj);
add(buttonDivObj);
buttonAddObj.addActionListener(aCalculatorObj);
buttonMinObj.addActionListener(aCalculatorObj);
buttonMulObj.addActionListener(aCalculatorObj);
buttonDivObj.addActionListener(aCalculatorObj);
buttonDotObj.addActionListener(aCalculatorObj);
buttonEqaObj.addActionListener(aCalculatorObj);
buttonNumObj[0].addActionListener(aCalculatorObj);
buttonNumObj[1].addActionListener(aCalculatorObj);
buttonNumObj[2].addActionListener(aCalculatorObj);
buttonNumObj[3].addActionListener(aCalculatorObj);
buttonNumObj[4].addActionListener(aCalculatorObj);
buttonNumObj[5].addActionListener(aCalculatorObj);
buttonNumObj[6].addActionListener(aCalculatorObj);
buttonNumObj[7].addActionListener(aCalculatorObj);
buttonNumObj[8].addActionListener(aCalculatorObj);
buttonNumObj[9].addActionListener(aCalculatorObj);
}
}
class ACalculator extends JFrame implements ActionListener{
JTextField textFieldObj;
ButtonPanel buttonPanelObj;
ACalculator(){
super("Calculator");
textFieldObj=new JTextField();
textFieldObj.setEditable(false);
textFieldObj.setBackground(new Color(218,255,255));
textFieldObj.setHorizontalAlignment(4);
getContentPane().add("North",textFieldObj);
buttonPanelObj=new ButtonPanel(this);
getContentPane().add("Center",buttonPanelObj);
setSize(200,200);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
int method=0; //计算规则:0无,1加,2减,3乘,4除。
double temp=0; //当前数据
double temp_a=0; //先存放当前数据,再与本次运算存放结果
double temp_b=0; //存放上次temp_a的值,再与本次temp_a运算
boolean dot=false; //是否已经按了小数点
boolean result=false; //是否按了等号
String input=""; //输入字符串
String output=""; //显示字符串
public void actionPerformed(ActionEvent e){
String command=e.getActionCommand();
if(command.equals(".")){ //如果按的是小数点
if(dot==true) command=""; //如果已经有了小数点,不再加小数点
input+=command;
textFieldObj.setText(input);//显示
dot=true; //设置为按过小数点
}
if(command.equals("0")){ //如果按的是0
if(result==true){ //如果按过等号
temp_a=0; //恢复初始值,但temp_b未恢复
result=false;
method=0;
}
if(input.equals("0")) input=""; //开头按多个0等于按一个0
input+=command;
textFieldObj.setText(input);
}
if(command.equals("1")||command.equals("2")||command.equals("3")||command.equals("4")||command.equals("5")||command.equals("6")||command.equals("7")||command.equals("8")||command.equals("9")){//如果按的是1-9数字
if(result==true){ //如果按过等号,恢复初始值,但temp_b未恢复
temp_a=0;
result=false;
method=0;
}
input+=command; //显示按的数字
textFieldObj.setText(input);
}
if(command.equals("+")||command.equals("-")||command.equals("×")||command.equals("÷")||command.equals("=")){//如果按的是运算符号
if(input.equals("")&&method==0){
if(command.equals("-")){ //按的第一个是“-”,则显示负数,按负数运算
input="-";
textFieldObj.setText(input);
}
else textFieldObj.setText("请先输入数据"); //如果没按数字,直接按其他运算符号,则提示
}
else{
if(input.equals(".")) input="0.";//如果只输入小数点,自动转换为0.
if(!input.equals("")) temp=Double.parseDouble(input);//显示框中的字符串转换为double类型数据
if(temp_a==0){ //这里的交换自己觉得比较经典
temp_a=temp;
temp_b=temp_a;
}
else{
temp_b=temp_a;
temp_a=temp;
}
if(method==1) temp_a=temp_b+temp_a;//执行加,存放结果
if(method==2) temp_a=temp_b-temp_a;//执行减,存放结果
if(method==3) temp_a=temp_b*temp_a;
if(method==4) temp_a=temp_b/temp_a;
if(command.equals("+")){//如果按的是加
method=1; //设标志
if(result==true){//如果按了等号
temp_a=temp_b;//代入数据慢慢研究就懂了,要讲真的说不好
result=false;
}
}
if(command.equals("-")){
method=2;
if(result==true){
temp_a=temp_b;
result=false;
}
}
if(command.equals("×")){
method=3;
if(result==true){
temp_a=temp_b;
result=false;
}
}
if(command.equals("÷")){
method=4;
if(result==true){
temp_a=temp_b;
result=false;
}
}
if(command.equals("=")) result=true; //如果按的是等号,设标志
dot=false; //以下是只要按运算符号都会执行的,而非按等号才执行的哦
input="";
output=Double.toString(temp_a);
textFieldObj.setText(output);
}
}
}
}
public class Calculator{
public static void main(String[] args){
ACalculator calculatorObj=new ACalculator();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -