/**
*
*/
package codevald.calculator;
/**
* @Description
* @author codevald
* @Version v1.0
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import java.math.BigDecimal;
public class Calculator {
//操作数1,为了程序的安全,初值一定要设置。这里设置为0
//操作数1
String str1 = "0";
//操作数2
String str2 = "0";
//运算符
String signal = "+";
//运算结果
String result = "";
//以下k1至k2为状态开关
//开关k1用于选择输入的方向,将要写入str1或str2,1表示输入str1,2表示输入str2
int k1 = 1;
//开关k2用于记录符号键的次数,如果k2 > 1 表示进行的是向2 + 3 -9 + 8 这样的多符号的运算 k2 = 1表示是普通运算
int k2 = 1;
//k3表示str1是否可以被清0,1表示可以,不为1表示不可以
int k3 = 1;
//k4表示str1是否可以被清0,1表示可以,不为1表示不可以
int k4 = 1;
//k5表示str2是否可以被清0,1表示可以,不为1表示不可以
int k5 = 1;
//store的作用类似于寄存器,用于记录是否连续按下符号键
JButton store;
Vector vt = new Vector(20,10);
//声明各个UI组件对象并初始化
JFrame frame = new JFrame("Calculator");
JTextField result_TextField = new JTextField(result,20); //20表示文本框占20列
JButton clear_Button = new JButton("clear");
JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton button_Dian = new JButton(".");
JButton button_jia = new JButton("+");
JButton button_jian = new JButton("-");
JButton button_cheng = new JButton("*");
JButton button_chu = new JButton("/");
JButton button_dy = new JButton("=");
//构造器
public Calculator() {
//为按钮0设置等效键,即可以通过对应的键盘按键来代替点击它
button0.setMnemonic(KeyEvent.VK_0);
button1.setMnemonic(KeyEvent.VK_1);
button2.setMnemonic(KeyEvent.VK_2);
button3.setMnemonic(KeyEvent.VK_3);
button4.setMnemonic(KeyEvent.VK_4);
button5.setMnemonic(KeyEvent.VK_5);
button6.setMnemonic(KeyEvent.VK_6);
button7.setMnemonic(KeyEvent.VK_7);
button8.setMnemonic(KeyEvent.VK_8);
button9.setMnemonic(KeyEvent.VK_9);
clear_Button.setMnemonic(KeyEvent.VK_CLEAR);
button_jia.setMnemonic(KeyEvent.VK_ADD);
button_jian.setMnemonic(KeyEvent.VK_SUBTRACT);
button_cheng.setMnemonic(KeyEvent.VK_MULTIPLY);
button_chu.setMnemonic(KeyEvent.VK_DIVIDE);
button_dy.setMnemonic(KeyEvent.VK_EQUALS);
//设置文本框右对齐,是输入与结果都靠右显示
result_TextField.setHorizontalAlignment(JTextField.RIGHT);
//将UI组件添加进容器内
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(4,4,5,5));
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
JPanel pan2 = new JPanel();
pan2.setLayout(new BorderLayout());
pan2.add(result_TextField,BorderLayout.WEST);
pan2.add(clear_Button,BorderLayout.EAST);
//设置主窗口出现在屏幕上的位置
frame.setLocation(100,200);
//设置窗体不能调整大小
frame.setResizable(false);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH);
frame.getContentPane().add(pan,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
//事件处理程序
//数字键
class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String ss = ((JButton) e.getSource()).getText();
store = (JButton) e.getSource();
vt.add(store);
if (k1 == 1) {
if (k3 == 1) {
str1 = "";
k5 = 1;
}
str1 = str1 + ss;
k3 = k3 + 1;
//显示结果
result_TextField.setText(str1);
} else if (k1 == 2) {
if (k4 == 1) {
str2 = "";
k5 = 1;
}
str2 = str2 + ss;
k4 = k4 + 1;
result_TextField.setText(str2);
}
}
}
//输入的运算符号的处理
class Listener_signal implements ActionListener {
public void actionPerformed(ActionEvent e) {
String ss2 = ((JButton) e.getSource()).getText();
store = (JButton) e.getSource();
vt.add(store);
if (k2 == 1) {
//开关k1为1时向数1写入输入值,为2时向数2写入输入值
k1 = 2;
k5 = 1;
signal = ss2;
k2 = k2 + 1; //按符号键的次数
} else {
int a = vt.size();
JButton c = (JButton) vt.get(a - 2);
if (!(c.getText().equals("+"))
&& !(c.getText().equals("-"))
&& !(c.getText().equals("*"))
&& !(c.getText().equals("/")))
{
cal();
str1 = result;
//开关k1为1时,向数1写入数值,为2时向数2写入数值
k1 = 2;
k5 = 1;
k4 = 1;
signal = ss2;
}
k2 = k2 + 1;
}
}
}
//清除键的逻辑(Clear)
class Listener_clear implements ActionListener {
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
k5 = 1;
str1 = "0";
str2 = "0";
signal = "";
result = "";
result_TextField.setText(result);
vt.clear();
}
}
//等于键的逻辑
class Listener_dy implements ActionListener {
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
cal();
//还原各个开关的状态
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
str1 = result;
}
}
//小数点的处理
class Listener_xiaos implements ActionListener {
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
if (k5 == 1) {
String ss2 = ((JButton) e.getSource()).getText();
if (k1 == 1) {
if (k3 == 1) {
str1 = "";
//还原开关k5的状态
k5 = 1;
}
str1 = str1 + ss2;
k3 = k3 + 1;
//显示结果
result_TextField.setText(str1);
} else if (k1 == 2) {
if (k4 == 1) {
str2 = "";
//还原开关k5的状态
k5 = 1;
}
str2 = str2 + ss2;
k4 = k4 + 1;
result_TextField.setText(str2);
}
}
k5 = k5 + 1;
}
}
//注册各个监听器,即绑定事件响应逻辑�
简单计算器Calculatorv1.0
36 浏览量
2023-06-13
21:45:08
上传
评论
收藏 3KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/7aeb9e330bfb4c16b7278ccf0f40079a_weixin_41695995.jpg!1)
CodeVald
- 粉丝: 4990
- 资源: 5