一、项目介绍
本项目主要使用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上面直接下载哦!喜欢的话点点赞!感谢您的支持!
->高级计算机完整代码