JavaSwing实现高级计算器

该文章介绍了一个使用JavaSwing开发的高级计算器项目,具有可视化界面,支持sin、cos、tan三角函数,以及加减乘除、百分比、内存操作等功能。代码示例展示了页面布局、三角函数实现和运算符处理。
摘要由CSDN通过智能技术生成

一、项目介绍

本项目主要使用Java语言,利用JavaSwing实现可视化界面的高级计算器,可以支持cos、sin、tan三角函数运算,MR、MS、MC高级操作,±*/%基础运算,ln函数等等功能,结果计算准确,且考虑到运算符的优先级,所以可以支持连续运算等。

二、效果预览

在这里插入图片描述

三、主要代码演示

1. 页面布局

JPanel resultField = new JPanel();
JPanel buttonField = new JPanel();
Container all = getContentPane();
GridLayout gridl;
gridl = new GridLayout(4, 6, 3, 3);
clear.setFont(font);
memoryArea.setFont(font);
dispresult.setFont(font);
memoryArea.setEditable(false);
clear.addActionListener(this);
dispresult.setEditable(false);
resultField.add(memoryArea);
resultField.add(clear);
resultField.add(dispresult);
all.setLayout(new FlowLayout());
all.add(resultField);
//定义按钮,顺序与显示位置有关
String[] buttonname = {"sin", "MC", "0", "1", "2", "+", "√X","cos", "MR", "3", "4", "5", "-", "X^2","tan", "MS", "6", "7", "8", "x", "+/-", "ln"," M+", "9", ".", "=", "/", "%"};
buttonField.setLayout(gridl);
//分4行显示,每行7个
for (int i = 0; i < 7; i++) {
	for (int j = 0; j < 4; j++) {
		jbuttons[i * 4 + j] = new JButton(buttonname[i * 4 + j]);
		jbuttons[i * 4 + j].addActionListener(this);
		jbuttons[i * 4 + j].setFont(font);
		buttonField.add(jbuttons[i * 4 + j]);
	}
}
all.add(buttonField);
//设置窗口大小
setSize(490, 220);
setResizable(true);
 setVisible(true);

2.三角函数sin、cos、tan

//sin
if (source == jbuttons[0]) {
	double temp = Math.sin(Double.parseDouble(dispresult.getText()));
	dispresult.setText(String.valueOf(temp));
	prev = true;
	repeat = false;
	dot = true;
	return;
}
//cos
if (source == jbuttons[7]) {
	double temp = Math.cos(Double.parseDouble(dispresult.getText()));
	dispresult.setText(String.valueOf(temp));
	prev = true;
	repeat = false;
	dot = true;
	return;
}
//tan
if (source == jbuttons[14]) {
	double temp = Math.tan(Double.parseDouble(dispresult.getText()));
	dispresult.setText(String.valueOf(temp));
	prev = true;
	repeat = false;
	dot = true;
	return;
}

3.运算符+,-,*,/,%,=

//加法
if (source == jbuttons[5]) {
	dot = true;
	if (repeat) {
		firstsymbol = '+';
		return;
	}
	second = Double.parseDouble(dispresult.getText());
	switch (secondsymbol) {
		case '*':
			second *= first;
			break;
		case '/':
			if (divide(second)) return;
			second = first / second;
	}// end of switch (secondsymbol)
	secondsymbol = '\0';
	switch (firstsymbol) {
		case '\0':
			result = second;
			firstsymbol = '+';
			break;
		case '+':
			result += second;
			dispresult.setText(String.valueOf(result));
			break;
		case '-':
			result -= second;
			firstsymbol = '+';
			dispresult.setText(String.valueOf(result));
			break;
		case '*':
			result *= second;
			firstsymbol = '+';
			dispresult.setText(String.valueOf(result));
			break;
		case '/':
			if (divide(second)) return;
			result /= second;
			firstsymbol = '+';
			dispresult.setText(String.valueOf(result));
		case '%':
			result %= second;
			firstsymbol = '+';
			dispresult.setText(String.valueOf(result));
	}//end of switch (firstsymbol)
	prev = true;
	repeat = true;
	return;
}
//减法
if (source == jbuttons[12]) {
	dot = true;
	if (repeat) {
		firstsymbol = '-';
		return;
	}
	second = Double.parseDouble(dispresult.getText());
	switch (secondsymbol) {
		case '*':
			second *= first;
			break;
		case '/':
			if (divide(second)) return;
			second = first / second;
			break;
		case '%':
			second %= first;
	}
	secondsymbol = '\0';
	switch (firstsymbol) {
		case '\0':
			result = second;
			firstsymbol = '-';
			break;
		case '+':
			result += second;
			firstsymbol = '-';
			dispresult.setText(String.valueOf(result));
			break;
		case '-':
			result -= second;
			dispresult.setText(String.valueOf(result));
			break;
		case '*':
			result *= second;
			firstsymbol = '-';
			dispresult.setText(String.valueOf(result));
			break;
		case '/':
			if (divide(second)) return;
			result /= second;
			firstsymbol = '-';
			dispresult.setText(String.valueOf(result));
			break;
		case '%':
			result %= second;
			firstsymbol = '-';
			dispresult.setText(String.valueOf(result));
	}
	prev = true;
	repeat = true;
	return;
}
//乘法
if (source == jbuttons[19]) {
	dot = true;
	if (repeat) {
		if (secondsymbol == '\0') firstsymbol = '*';
		else secondsymbol = '*';
			return;
	}
	second = Double.parseDouble(dispresult.getText());
	switch (secondsymbol) {
		case '\0':
			switch (firstsymbol) {
				case '\0':
					firstsymbol = '*';
					result = second;
					break;
				case '+':
				case '-':
					first = second;
					secondsymbol = '*';
					break;
				case '*':
					result *= second;
					dispresult.setText(String.valueOf(result));
					break;
				case '/':
					if (divide(second)) return;
					result /= second;
					dispresult.setText(String.valueOf(result));
					firstsymbol = '*';
					break;
				case '%':
					result %= second;
					firstsymbol = '*';
					dispresult.setText(String.valueOf(result));
			}
			break;
		case '*':
			first *= second;
			dispresult.setText(String.valueOf(first));
			break;
		case '/':
			if (divide(second)) return;
			first /= second;
			secondsymbol = '*';
			dispresult.setText(String.valueOf(first));
			break;
		case '%':
			result %= second;
			firstsymbol = '*';
			dispresult.setText(String.valueOf(result));
	}
	prev = true;
	repeat = true;
	return;
}
//等于
if (source == jbuttons[25]) {
	second = Double.parseDouble(dispresult.getText());
	dot = true;
	switch (secondsymbol) {
		case '*':
			second *= first;
			break;
		case '/':
			if (divide(second)) return;
			second = first / second;
	}// end of Switch ( secondsymbol )
	secondsymbol = '\0';
	switch (firstsymbol) {
		case '+':
			result += second;
			break;
		case '-':
			result -= second;
			break;
		case '*':
			result *= second;
			dispresult.setText(String.valueOf(result));
			break;
		case '/':
			if (divide(second)) return;
			result /= second;
			break;
		case '%':
			result %= second;
			dispresult.setText(String.valueOf(result));
			break;
	}// end of switch (firstsymbo1)
	if (firstsymbol != '\0')
		dispresult.setText(String.valueOf(result));
	firstsymbol = '\0';
	prev = true;
	repeat = false;
	return;
}
//除法
if (source == jbuttons[26]) {
	dot = true;
	if (repeat) {
		if (secondsymbol == '\0') firstsymbol = '/';
		else secondsymbol = '/';
		return;
	}
	second = Double.parseDouble(dispresult.getText());
	switch (secondsymbol) {
		case '\0':
			switch (firstsymbol) {
				case '\0':
					firstsymbol = '/';
					result = second;
					break;
				case '+':
				case '-':
					first = second;
					secondsymbol = '/';
					break;
				case '*':
					result *= second;
					firstsymbol = '/';
					dispresult.setText(String.valueOf(result));
					break;
				case '/':
					if (divide(second)) return;
					result /= second;
					dispresult.setText(String.valueOf(result));
					break;
				case '%':
					result %= second;
					firstsymbol = '/';
					dispresult.setText(String.valueOf(result));
			}//end of switch ( first symbol)
			break;
		case '*':
			first *= second;
			secondsymbol = '/';
			dispresult.setText(String.valueOf(first));
			break;
		case '/':
			if (divide(second)) return;
			first /= second;
			dispresult.setText(String.valueOf(first));
			break;
		case '%':
			result %= second;
			firstsymbol = '/';
			dispresult.setText(String.valueOf(result));
	}// end of switch (secondsymbo1)
	prev = true;
	repeat = true;
	return;
}
//取模
if (source == jbuttons[27]) {
	dot = true;
	if (repeat) {
		if (secondsymbol == '\0') firstsymbol = '%';
		else secondsymbol = '%';
		return;
	}
	second = Double.parseDouble(dispresult.getText());
	switch (secondsymbol) {
		case '\0':
			switch (firstsymbol) {
				case '\0':
					firstsymbol = '%';
					result = second;
					break;
				case '+':
				case '-':
					first = second;
					secondsymbol = '%';
					break;
				case '*':
					result *= second;
					firstsymbol = '%';
					dispresult.setText(String.valueOf(result));
					break;
				case '/':
					if (divide(second)) return;
					result /= second;
					firstsymbol = '%';
					dispresult.setText(String.valueOf(result));
					break;
				case '%':
					result %= second;
					dispresult.setText(String.valueOf(result));
			}//end of switch ( first symbol)
			break;
		case '*':
			first *= second;
			secondsymbol = '%';
			dispresult.setText(String.valueOf(first));
			break;
		case '/':
			if (divide(second)) return;
			first /= second;
			secondsymbol = '%';
			dispresult.setText(String.valueOf(first));
			break;
		case '%':
			result %= second;
			dispresult.setText(String.valueOf(result));
	}// end of switch (secondsymbo1)
	prev = true;
	repeat = true;
	return;
}

以上就是主要部分的内容展示,要获取完整代码,可以去我的git上面直接下载哦!喜欢的话点点赞!感谢您的支持!
->高级计算机完整代码

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值