import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame {
// 输入框,显示当前输入的数字或结果
private JTextField textField;
// 数字0-9及小数点按钮
private JButton button0, button1, button2, button3, button4, button5, button6, button7, button8, button9, buttonDot;
// 加减乘除按钮
private JButton buttonPlus, buttonMinus, buttonMultiply, buttonDivide;
// 操作(等于、清空、删除)按钮
private JButton buttonEqual, buttonClear, buttonDelete;
// 平方、立方、乘方、n次方、开平方、开n次方、倒数按钮
private JButton buttonSquare, buttonCube, buttonPower, buttonNthPow, buttonRoot, buttonNthRoot, buttonReciprocal;
// 三角函数、反三角函数按钮
private JButton buttonSin, buttonCos, buttonTan, buttonAsin, buttonAcos, buttonAtan;
// 当前操作
private Operation currentOperation;
// 当前值
private int currentValue;
// 枚举操作类型
private enum Operation {
ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION, POWER, NTHROOT
}
public Calculator() {
initComponents();
initListeners();
}
/**
* 初始化组件
*/
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Calculator");
// 使用GridBagLayout布局方式
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
// 初始化输入框
textField = new JTextField();
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 6; // 扩展6列
constraints.fill = GridBagConstraints.BOTH;
add(textField, constraints);
// 初始化数字、小数点按钮
button7 = new JButton("7");
button8 = new JButton("8");
button9 = new JButton("9");
button4 = new JButton("4");
button5 = new JButton("5");
button6 = new JButton("6");
button1 = new JButton("1");
button2 = new JButton("2");
button3 = new JButton("3");
button0 = new JButton("0");
buttonDot = new JButton(".");
addButton(constraints, button7, 0, 1);
addButton(constraints, button8, 1, 1);
addButton(constraints, button9, 2, 1);
addButton(constraints, button4, 0, 2);
addButton(constraints, button5, 1, 2);
addButton(constraints, button6, 2, 2);
addButton(constraints, button1, 0, 3);
addButton(constraints, button2, 1, 3);
addButton(constraints, button3, 2, 3);
addButton(constraints, button0, 0, 4);
addButton(constraints, buttonDot, 1, 4);
// 初始化平方、立方、乘方、n次方、开平方、开n次方、倒数按钮
buttonSquare = new JButton("x²");
buttonCube = new JButton("x³");
buttonPower = new JButton("x^y");
buttonNthPow = new JButton("x^n");
buttonRoot = new JButton("√x");
buttonNthRoot = new JButton("n√x");
buttonReciprocal = new JButton("1/x");
addButton(constraints, buttonSquare, 3, 1);
addButton(constraints, buttonCube, 4, 1);
addButton(constraints, buttonPower, 5, 1);
addButton(constraints, buttonNthPow, 3, 2);
addButton(constraints, buttonRoot, 4, 2);
addButton(constraints, buttonNthRoot, 5, 2);
addButton(constraints, buttonReciprocal, 5, 3);
// 初始化加减乘除按钮
buttonPlus = new JButton("+");
buttonMinus = new JButton("-");
buttonMultiply = new JButton("×");
buttonDivide = new JButton("÷");
addButton(constraints, buttonPlus, 3, 3);
addButton(constraints, buttonMinus, 4, 3);
addButton(constraints, buttonMultiply, 3, 4);
addButton(constraints, buttonDivide, 4, 4);
// 初始化操作(等于、清空、删除)按钮
buttonEqual = new JButton("=");
buttonClear = new JButton("C");
buttonDelete = new JButton("DEL");
constraints.gridwidth = 2;
addButton(constraints, buttonEqual, 5, 4);
constraints.gridx = 3;
addButton(constraints, buttonClear, 0, 5);
constraints.gridx = 4;
addButton(constraints, buttonDelete, 1, 5);
// 初始化三角函数、反三角函数按钮
buttonSin = new JButton("sin");
buttonCos = new JButton("cos");
buttonTan = new JButton("tan");
buttonAsin = new JButton("asin");
buttonAcos = new JButton("acos");
buttonAtan = new JButton("atan");
addButton(constraints, buttonSin, 0, 6);
addButton(constraints, buttonCos, 1, 6);
addButton(constraints, buttonTan, 2, 6);
addButton(constraints, buttonAsin, 3, 6);
addButton(constraints, buttonAcos, 4, 6);
addButton(constraints, buttonAtan, 5, 6);
pack();
}
/**
* 添加按钮
*/
private void addButton(GridBagConstraints constraints, JButton button, int x, int y) {
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = 1;
add(button, constraints);
}
/**
* 初始化各个按钮的监听器
*/
private void initListeners() {
// 数字0-9、小数点按钮监听器
ActionListener numberListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String textValue = textField.getText();
textValue += ((JButton)e.getSource()).getText();
textField.setText(textValue);
}
};
button0.addActionListener(numberListener);
button1.addActionListener(numberListener);
button2.addActionListener(numberListener);
button3.addActionListener(numberListener);
button4.addActionListener(numberListener);
button5.addActionListener(numberListener);
button6.addActionListener(numberListener);
button7.addActionListener(numberListener);
button8.addActionListener(numberListener);
button9.addActionListener(numberListener);
buttonDot.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!textField.getText().contains(".")) {
String textValue = textField.getText();
textValue += ".";
textField.setText(textValue);
}
}
});
// 平方、立方、乘方、n次方、开平方、开n次方、倒数按钮监听器
ActionListener operationListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double value = Double.parseDouble(textField.getText());
switch (((JButton)e.getSource()).getText()) {
case "x²":
textField.setText(Double.toString(Math.pow(value, 2)));
break;
case "x³":
textField.setText(Double.toString(Math.pow(value, 3)));
break;
case "x^y":
currentValue = (int)Math.round(value);
currentOperation = Operation.POWER;
textField.setText("");
break;
case "x^n":
currentValue = (int)Math.round(value);
currentOperation = Operation.NTHROOT;
textField.setText("");
break;
case "n√x":
currentValue = (int)Math.round(value);
currentOperation = Operation.NTHROOT
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
csbysj2020
- 粉丝: 3213
- 资源: 6193
最新资源
- Proteus 7.8超再生模块接收发送仿真源程序实现:433MHz单片机通信实战演练,单片机433MHz超再生模块:Proteus仿真收发功能实现与原理说明,单片机433MHz超再生模块发送接收Pr
- 基于TypeScript和Html的跨语言Awaken设计源码分享与优化
- 基于MATLAB Simulink建模的双侧独立电驱动履带车转向控制研究:涵盖PI与SMC算法比较,适应大、中半径及原地转向工况,基于MATLAB Simulink建模的双侧独立电驱动履带车转向控制研
- 基于VSG预同步控制与自适应转动惯量的离并网无缝切换技术,基于VSG预同步控制的自适应转动惯量无缝并网切换技术,VSG预同步控制与自适应转动惯量 离并网无缝切 ,VSG预同步控制; 自适应转动惯量
- COMSOL光学计算:BICs合并技术,带能、品质因子及远场偏振可视化解析,详细视频教程,COMSOL光学模拟:BICs合并、能带与品质因子计算及远场偏振箭头绘制教程,详解视频教学,comsol计算光
- 基于SpringBoot与Vue的校友社交管理系统源码设计
- 基于Python的剪切板监听图片识别进入白板设计源码
- 基于Comsol软件的超声换能器相控阵聚焦仿真研究,基于Comsol仿真平台:超声换能器聚焦及相控阵仿真技术研究,Comsol超声能器聚焦 仿真 超声能器相控阵聚焦仿真 ,Comsol; 超声换能器
- 基于Java和Kotlin的SASS电影票管理系统父类设计源码
- 基于Java开发的演唱会在线购票系统设计源码
- 欧姆龙CP1H与台达VFD-M变频器:MODBUS RTU简易主站通讯的PLC程序设计与应用,欧姆龙CP1H与台达VFD-M变频器:基于MODBUS RTU简易主站的轮询通讯保护策略与PLC程序解析
- 基于COMSOL接口的Matlab编程:快速构建三维随机裂隙网络模型,《COMSOL中高效导入的三维随机裂隙网络模型编程生成》,矩形三维随机裂隙网络 使用COMSOL with Matlab接口编程
- 基于Java语言的实时公交系统设计源码
- Simulink仿真模型:基于自适应虚拟阻抗下垂控制改进的双机并联孤岛模式,解决线路阻抗差异导致的无功功率不均分问题(模型版本2018b及以上),Simulink仿真模型下的双机并联下垂控制改进:自适
- 基于Vue框架的人脸考勤系统设计源码
- 电动汽车Simulink仿真模型:整车动力性能与能耗测试模拟平台(支持NEDC工况),电动汽车Simulink仿真模型:整车动力性测试与能耗仿真分析,电动汽车 simulink仿真模型, 可进行整车动
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)