📄 calculator.java
字号:
import java.awt.BorderLayout;//调用BorderLayout布置容器,分北、南、东、西、中五个区//made by nmbaby
import java.awt.GridLayout;//调用GridLayout布置容器,分为大小相等的矩形
import java.awt.event.ActionEvent;//处理按下按钮的情况
import java.awt.event.ActionListener;//接收操作事件的侦听器接口
import javax.swing.JButton;//按钮的实现
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
//CalcButton继承JButton按钮类
class CalcButton extends JButton{
String num;//按钮显示的String
public CalcButton(String c,ActionListener action){//构造
super(c);
num=c;
addActionListener(action);
}
}
//Calculator类继承JFrame实现ActionListener
public class Calculator extends JFrame implements ActionListener{
String str1="",str2="",res;//存放输入的两个数字的String
float result=0;//用来存放运算结果
char sign;//存放运算符号
private final JTextField display=new JTextField();
public Calculator(){//构造
super("Calculator");
initComponent();//调用界面函数
}
private void initComponent(){//界面函数,实现计算器的可视性操作界面
JPanel c=(JPanel) getContentPane();//强制转化类型
//定义str 的String型数组,储存运算符号
String str[]=new String[]{"/","*","-","0",".","=","+"};
setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭窗口
c.setLayout(new BorderLayout());//制定布局方式五区域分区方式
c.add(display,BorderLayout.NORTH);//实现北区
JPanel centerPanel=new JPanel(new GridLayout(4,4));//制定布局方式网格型布局
for(int i=1;i<10;++i){//显示1~9和/,*,-的按钮
centerPanel.add(new CalcButton(String.valueOf(i),this));//数值
if(i%3==0) centerPanel.add(new CalcButton(str[i/3-1],this));
}
for(int i=3;i<7;++i){//显示0,.,=,+的按钮
centerPanel.add(new CalcButton(str[i],this));
}
c.add(centerPanel);//结束
setSize(270,270);//界面的宽和高
}
//实现接口ActionListener的监听方法,完成运算的主函数
public void actionPerformed(ActionEvent e){
CalcButton b=(CalcButton)e.getSource();//强制转化
//将b.num的String型(字符串只有一个元素)转化为char型,以便switch语句比较
char ch=b.num.charAt(0);
switch(ch){
//当输入的b.num非符号时(/ * - + =)现实,并对str将其连接在str后面
case '.':case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':{
str2=str2.concat(b.num);
display.setText(str2);
}break;
//当输入的b.num是符号时(/ * - +)不现实,并将str2附给str1,并使str2归零以便继续输入
case '+': case '-':case '*':case '/':{
res=str2; str2=str1;
str1=res; sign=ch;
display.setText("");
}break;
case '=':{
float data1=0,data2=0;
data1=Float.parseFloat(str1);//将str1,2的String型转化为data1,2的float型
data2=Float.parseFloat(str2);
switch(sign){
case '+':result=data1+data2;break;//运算
case '-':result=data1-data2;break;
case '*':result=data1*data2;break;
case '/':result=data1/data2;break;
default:display.setText("输入有误!!");
}
// 转化类型把运算结果result从float型转化到String型的res,
res=String.valueOf(result);
display.setText(res);//显示结果res
str1="";str2="";//重新赋值,使str恢复初始状态
}break;
}
}
public static void main(String[] args){//main
new Calculator().setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -