📄 calculator3.java
字号:
package com.Calculator3;
import java.awt.BorderLayout;
/*BorderLayout布局是是Dialog类和Frame类的默认布局管理器,
容器被划分为五个管理区域,东南西北中。*/
import java.awt.GridLayout;
/*GridLayout布局是一种网格式的布局管理器*/
import java.awt.event.ActionEvent;//ActionEvent为事件类
import java.awt.event.ActionListener;//ActionListener为一般事件接口
import javax.swing.*;//这一句话相与下面四句话等效
/*import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;*/
//感觉javax.swing的按钮比较漂亮
import java.math.BigDecimal;//引入数学类,类似于C++中的#include<math.h>
public class Calculator3 implements ActionListener {
/*要实现接口,可在一个类的声明中用关键字implements表示该泪已经实现的接口*/
private JTextField jtf = new JTextField("", 30);//用来显示数值的文本框
private Boolean append = false;
private String operator = "+";//记录选择的计算形式:+、-、*、/
private BigDecimal d1 = BigDecimal.valueOf(0);
// private BigDecimal d1 = new BigDecimal(0.0);
public Calculator3() {//构造函数
JFrame jf = new JFrame("计算器");//定义框架“计算器”
JPanel jp = new JPanel();//定义面板
/*框架和面板都是容器,可以放置各控件,框架比面板更能“装”*/
jf.setLayout(new BorderLayout());
jp.setLayout(new GridLayout(5, 4));//GridLayou(5,4)即五行四列
String[] lable = { "backspace", "CE", "C", "+", "7", "8", "9", "-",
"4", "5", "6", "×", "1", "2", "3", "/", "0", "+/-", ".", "=" };
//定义字符串数组,并将各字符串初始化,注意:这里的label并不是类,只是字符串数值名,起到“标签”作用
JButton[] jb = new JButton[lable.length];
//定义和标签同样多的按钮
for (int i = 0; i < lable.length; i++) {
jb[i] = new JButton(lable[i]);//将标签“贴”在按钮上
jp.add(jb[i]);//将按钮加入到面板中
jb[i].addActionListener(this);//为按钮添加事件监听器
}//for循环的使用常常可以简化问题
jf.add(jtf, BorderLayout.NORTH);//将显示数值的文本框放在框架的在上面
jf.add(jp);//将面板添加到框架中
jf.setVisible(true);//必须调用setVisible()使框架的实例可见
jf.pack();// 自动调整大小,还可以调用setSize()方法设置框架大小,否则框架同样不可见。
jf.setLocation(400, 300);// 设置窗口出现时左上点的坐标
jf.validate();// 重新加载组件属性,重新显示
jf.setResizable(false);//框架的大小不可改变
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置框架默认的关闭操作
}
//完成Calculator3类的定义
public static void main(String[] args) {
new Calculator3();//写成Calculator3 calcutor3 = new Calculator3();更规范
}//在主函数中生成一个类的实例,没有定义对象名
public void actionPerformed(ActionEvent e) {//实现ActionListener接口中的方法
String com = e.getActionCommand();//点击按钮后,将按钮上的命令名(为字符串)赋给com
if (com.equals("0") || com.equals("1") || com.equals("2")
|| com.equals("3") || com.equals("4") || com.equals("5")
|| com.equals("6") || com.equals("7") || com.equals("8")
|| com.equals("9")) {
//如果点击的是数字,那么进行一下分支
if (append) {//append的初值设为false
jtf.setText(jtf.getText() + com);//追加字符串,注意区别setText()和getText()
} else {
jtf.setText(com);
append = true;
}
} else if (com.equals(".")) {//如果点击的是小数点,那么进行以下分支
String temp = jtf.getText();//temp保存当前文本框内容,以备后面计算之用
if (temp.indexOf(".") == -1) {
jtf.setText(jtf.getText() + com);
append = true;//刚开始就有小数点也是允许追加的
}
} else if (com.equals("+") || com.equals("-") || com.equals("*")
|| com.equals("/")) {
String temp = jtf.getText();
d1 = BigDecimal.valueOf(Double.parseDouble(temp));//
operator = com;
append = false;//再输入就是替换了而不是追加了
} else if (com.equals("=")) {
String temp = jtf.getText();
BigDecimal d2 = BigDecimal.valueOf(Double.parseDouble(temp));
if (operator.equals("+")) {
jtf.setText(d1.add(d2).doubleValue() + "");
append = false;
}
if (operator.equals("-")) {
jtf.setText(d1.subtract(d2).doubleValue() + "");
append = false;
}
if (operator.equals("×")) {
jtf.setText(d1.multiply(d2).doubleValue() + "");
append = false;
}
if (operator.equals("/")) {
jtf.setText(d1.divide(d2).doubleValue() + "");
append = false;
}
// jtf.setText(d1 + "");
// append = false;
} else if (com.equals("+/-")) {
String temp = jtf.getText();
double d2 = Double.parseDouble(temp);
d2 = d2 * (-1);
jtf.setText(d2 + "");
} else if (com.equals("backspace")) {
jtf.setText(jtf.getText().substring(0, jtf.getText().length() - 1));
} else if (com.equals("CE") || com.equals("C")) {
jtf.setText("");
}
}
}
/*getActionCommand
public String getActionCommand()返回与此动作相关的命令字符串。
这使得 "modal" 组件可以由其当前的状态,通过此字符串来得到它能够产生的几个命令之一。
例如,单个按钮可以在“显示详细信息”和“隐藏详细信息”之间切换。在所有情况下,
源对象和事件都将是相同的,但命令字符串将会标识出实际对应的动作。
注意,如果将 null 命令字符串传递给此 ActionEvent 的构造方法,则此方法返回 null。
返回:
标识此事件命令的字符串
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -