📄 myjsq.java
字号:
import java.awt.*;
import java.text.*;
import java.awt.event.*;
public class MyJSQ extends Frame implements ActionListener{//定义变量和相关按钮
boolean clickable;
int i;
double zhongjian,answerd;//用来保存double型数据的中间值(zhongjian)和最后结果(answerd)
DecimalFormat jingdu; //设置数据输出精度
short key = -1, prekey = -1;//key用来保存当前进行何种运算,prekey用来保存前次进行何种运算
Button a[];
private Button jia=new Button("+");
private Button jian=new Button("-");
private Button cheng=new Button("*");
private Button chu=new Button("/");
private Button point=new Button(".");
private Button dengyu=new Button("=");
private Button qingling=new Button("清零");
private Button back=new Button("←");
private Button baifen=new Button("%");
private Button fu=new Button("+/-");
private TextField input =new TextField();
public class WindowCloser extends WindowAdapter{
public void windowClosing(WindowEvent we){System.exit(0);}
}
//设计面板
private void setup(){
a = new Button[10];
for (int i = 0; i < a.length; i++)
a[i] = new Button(Integer.toString(i));
qingling.setForeground(new Color(250,0,0));
Panel shuzi=new Panel();
shuzi.setLayout(new GridLayout(4,3));
for(int i=1;i<=9;i++)
shuzi.add(a[i]);
shuzi.add(a[0]);shuzi.add(point);shuzi.add(dengyu);
Panel yunsuanfu=new Panel();
yunsuanfu.setLayout(new GridLayout(4,1));
yunsuanfu.add(jia);yunsuanfu.add(jian);yunsuanfu.add(cheng);yunsuanfu.add(chu);
Panel fuhao =new Panel();
fuhao.setLayout(new GridLayout(4,1));
fuhao.add(qingling);fuhao.add(back);fuhao.add(fu);fuhao.add(baifen);
Panel zonghe2=new Panel();
zonghe2.setLayout(new GridLayout(1,2));
zonghe2.add(yunsuanfu);zonghe2.add(fuhao);
Panel zonghe3=new Panel();
zonghe3.setLayout(new GridLayout(1,2));
zonghe3.add(shuzi);zonghe3.add(zonghe2);
setLayout(new BorderLayout());
add("North",input);add("Center",zonghe3);
}
//构造方法
public MyJSQ(){
super("计算器");
setup();
jingdu = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值)
clickable = true;
answerd = 0;
//增添事件监听
for(int i=0;i<=9;i++)
a[i].addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
point.addActionListener(this);
dengyu.addActionListener(this);
qingling.addActionListener(this);
baifen.addActionListener(this);
back.addActionListener(this);
fu.addActionListener(this);
addWindowListener(new WindowCloser());
pack();
show();
}
//相关事件响应
public void actionPerformed(ActionEvent e){
boolean sign = false; //判断是否是double型数参与运算,是为true,不是为false
Object temp = e.getSource();
try {
//如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后
for (int i = 0; i <= 9; i++)
if (temp == a[i] && clickable == true)
input.setText(input.getText() + Integer.toString(i));
//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'
if (temp == point && clickable == true) {
boolean isDian = false;
if (input.getText().length() == 0)
isDian = true;
for (int i = 0; i < input.getText().length(); i++)
if ('.' == input.getText().charAt(i)) {
isDian = true;
break;
}
if (isDian == false)
input.setText(input.getText() + ".");
}
if ( (temp == jia || temp == jian || temp == cheng ||
temp == chu) && clickable == true) {
//'+'操作
if (temp == jia) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(input.getText());
break;
case 1:
answerd -= Double.parseDouble(input.getText());
break;
case 2:
answerd *= Double.parseDouble(input.getText());
break;
case 3:
if (Double.parseDouble(input.getText()) == 0) {
input.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(input.getText());
break;
default:
answerd = Double.parseDouble(input.getText());
}
input.setText("");
prekey = key = 0;
}
//'-'操作
if (temp == jian) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(input.getText());
break;
case 1:
answerd -= Double.parseDouble(input.getText());
break;
case 2:
answerd *= Double.parseDouble(input.getText());
break;
case 3:
if (Double.parseDouble(input.getText()) == 0) {
input.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(input.getText());
break;
default:
answerd = Double.parseDouble(input.getText());
}
input.setText("");
prekey = key = 1;
}
//'*'操作
if (temp == cheng) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(input.getText());
break;
case 1:
answerd -= Double.parseDouble(input.getText());
break;
case 2:
answerd *= Double.parseDouble(input.getText());
break;
case 3:
if (Double.parseDouble(input.getText()) == 0) {
input.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(input.getText());
break;
default:
answerd = Double.parseDouble(input.getText());
}
input.setText("");
prekey = key = 2;
}
//'/'操作
if (temp == chu) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(input.getText());
break;
case 1:
answerd -= Double.parseDouble(input.getText());
break;
case 2:
answerd *= Double.parseDouble(input.getText());
break;
case 3:
if (Double.parseDouble(input.getText()) == 0) {
input.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(input.getText());
break;
default:
answerd = Double.parseDouble(input.getText());
}
input.setText("");
prekey = key = 3;
}
}
//'='操作
if (temp == dengyu && clickable == true) {
//如果连续按'=',则进行连续运算
if (prekey == 5) {
if (key == 0) {
answerd += zhongjian;
input.setText(jingdu.format(answerd));
}
if (key == 1) {
answerd -= zhongjian;
input.setText(jingdu.format(answerd));
}
if (key == 2) {
answerd *= zhongjian;
input.setText(jingdu.format(answerd));
}
if (key == 3) {
if (Double.parseDouble(input.getText()) == 0) {
input.setText("除数不能为零");
clickable = false;
}
else {
answerd /= zhongjian;
input.setText(jingdu.format(answerd));
}
}
}
else {
zhongjian = Double.parseDouble(input.getText());
if (key == 0) {
prekey = -1;
answerd += Double.parseDouble(input.getText());
input.setText(jingdu.format(answerd));
}
if (key == 1) {
prekey = -1;
answerd -= Double.parseDouble(input.getText());
input.setText(jingdu.format(answerd));
}
if (key == 2) {
prekey = -1;
answerd *= Double.parseDouble(input.getText());
input.setText(jingdu.format(answerd));
}
if (key == 3) {
prekey = -1;
if (Double.parseDouble(input.getText()) == 0) {
input.setText("除数不能为零");
clickable = false;
}
else {
answerd /= Double.parseDouble(input.getText());
input.setText(jingdu.format(answerd));
}
}
}
prekey = 5;
}
//'%'操作,对第二个操作数除以100
if (temp == baifen && clickable == true) {
if (answerd == 0) {
String s = input.getText();
input.setText(s);
}
else {
boolean isDian = false;
for (int i = 0; i < input.getText().length(); i++)
if ('.' == input.getText().charAt(i)) {
isDian = true;
break;
}
//如果是double数,除100
if (isDian == true) {
double dtemp = Double.parseDouble(input.getText());
dtemp = dtemp / 100.0;
input.setText(Double.toString(dtemp));
}
else {
//如果是int数但能被100整除,则去掉末尾两个零
if (Integer.parseInt(input.getText()) % 100 == 0) {
int itemp = Integer.parseInt(input.getText());
itemp /= 100;
input.setText(Integer.toString(itemp));
}
//如果是int数,但不能被100整除,则按double数处理
else {
double dtemp = Double.parseDouble(input.getText());
dtemp = dtemp / 100.0;
input.setText(Double.toString(dtemp));
}
}
}
}
//按下'+/-'按钮时处理
if (temp == fu && clickable == true) {
boolean isNumber = true;
String s = input.getText();
for (int i = 0; i < s.length(); i++)
if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' ||
s.charAt(i) == '-')) {
isNumber = false;
break;
}
if (isNumber == true) {
//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉
if (s.charAt(0) == '-') {
input.setText("");
for (int i = 1; i < s.length(); i++) {
char a = s.charAt(i);
input.setText(input.getText() + a);
}
}
//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
else
input.setText('-' + s);
}
}
//按下'←'键,利用循环将当前字符串中的最后一个字母删除
if (temp == back && clickable == true) {
String s = input.getText();
input.setText("");
for (int i = 0; i < s.length() - 1; i++) {
char a = s.charAt(i);
input.setText(input.getText() + a);
}
}
//按下'qingling'按钮,文本框内数据清除,同时zhongjian,answerd清0
if (temp == qingling) {
zhongjian=answerd = 0;
input.setText("");
clickable = true;
}
}
//输入中如果有操作非法,比如按下两次'+',捕获异常
catch (Exception ae) {
input.setText("操作非法");
clickable = false;
}
input.requestFocus();
}
//主函数
public static void main(String args[])
{ MyJSQ ming=new MyJSQ();}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -