⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 哈工大实验课源代码
💻 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 + -