📄 listener.java
字号:
package calculator;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class Listener implements ActionListener
{
private Calculator c;
private Object source;
private char numberChar = ' ';
public Listener(Calculator c)
{
this.c = c;
}
public void actionPerformed(ActionEvent e)
{
source = e.getSource();
if( source == c.b[19] || source == c.b[20] || source == c.b[21] ||
source == c.b[25] || source == c.b[26] || source == c.b[27] ||
source == c.b[31] || source == c.b[32] || source == c.b[33] )
//添加数字1-9
addNumberOrPoint();
else if(source == c.b[37])//添加数字0
{
if(c.getStr1().length() > 40 || c.getStr2().length() > 40)
return ;
if(c.getStr1().length() == 0)
c.setStr1(c.getStr1().append('0'));
if(c.getStr1().length() > 1 && c.getStr1().indexOf("0") == 0 && c.getStr1().indexOf(".") == -1)
c.getStr1().deleteCharAt(0);
if(c.getStr1().length() != 0 && c.getStr2().length() == 0)
{
if(!c.getNewFlag())
{
if(!c.getPointFlag())
c.setStr1(c.getStr1().append('0'));
c.getDisplay().setText(c.getStr1().toString());
}
else if(c.getDoubleOperatorFlag() != -1)
{
c.getDisplay().setText(c.getStr2().toString() + '0');
c.setStr2(c.getStr2().append('0'));
}
else
c.getDisplay().setText("0");
}
else if(c.getStr1().length() != 0 && c.getStr2().length() != 0)
{
c.getDisplay().setText(c.getStr2().toString() + '0');
c.setStr2(c.getStr2().append('0'));
}
}
else if(source == c.b[38])//正负号
{
if (c.getStr1().length() == 0)
return ;
if(c.getDoubleOperatorFlag() != -1 && !c.getChangeFlag() && c.getStr2().length() == 0)
return ;
if (c.getStr1().length() != 0 && !c.getChangeFlag())
if(!c.getNewFlag())
{
c.setStr1(c.getStr1().insert(0, '-'));
c.getDisplay().setText(c.getStr1().toString());
c.setChangeFlag(true);
}
else if (c.getStr2().length() == 0)
return ;
else
{
c.setStr2(c.getStr2().insert(0, '-'));
c.getDisplay().setText(c.getStr2().toString());
c.setChangeFlag(true);
}
else if (c.getChangeFlag())
if (!c.getNewFlag())
{
if(c.getStr1().length() == 0)
return ;
c.setStr1(c.getStr1().deleteCharAt(0));
c.getDisplay().setText(c.getStr1().toString());
c.setChangeFlag(false);
}
else
{
if(c.getStr2().length() == 0)
return ;
c.setStr2(c.getStr2().deleteCharAt(0));
c.getDisplay().setText(c.getStr2().toString());
c.setChangeFlag(false);
}
}
else if(source == c.b[39])//小数点
if (!c.getNewFlag())
{
if (c.getStr1().length() != 0 && c.getPointFlag())
addNumberOrPoint();
else
{
if (c.getStr1().length() == 0)
{
c.getStr1().append("0.");
c.getDisplay().setText("0.");
}
}
c.setPointFlag(false);
}
else
{
if (c.getStr2().length() != 0 && c.getPointFlag() == true)
addNumberOrPoint();
else
{
if (c.getStr2().length() == 0)
{
c.getStr2().append("0.");
c.getDisplay().setText("0.");
}
}
c.setPointFlag(false);
}
else if(source == c.b[7] || source == c.b[9] || source == c.b[15] ||
source == c.b[16] || source == c.b[17] || source == c.b[22] ||
source == c.b[28] || source == c.b[34] || source == c.b[40])
// 两个数运算
{
if(c.getStr1().length() == 0)
c.getStr1().append(0);
if(c.getStr1().length() != 0 || c.getMemoryDisplayFlag())
{
doubleCalculate();
evaluateDoubleOperator();
}
}
else if(source == c.b[0] || source == c.b[1] || source == c.b[2] ||
source == c.b[4] || source == c.b[5] || source == c.b[6] ||
source == c.b[8] || source == c.b[10] || source == c.b[11] ||
source == c.b[13] ||source == c.b[14] || source == c.b[23] ||
source == c.b[29] || source == c.b[35] )
//单个数运算
{
if(c.getStr1().length() == 0)
c.getStr1().append(0);
if(!c.getNewFlag())
firstSingleCalculate();
else
secondSingleCalculate();
}
else if(source == c.b[3])//PI
{
c.getDisplay().setText(Double.toString(Math.PI));
if(!c.getNewFlag())
{
c.getStr1().setLength(0);
c.getStr1().append(Math.PI);
}
else
{
c.getStr2().setLength(0);
c.getStr2().append(Math.PI);
}
if(c.getMemoryPlusFlag())
c.setMemoryPlusFlag(false);
c.setPointFlag(true);
}
else if(source == c.b[12])//e
{
c.getDisplay().setText(Double.toString(Math.E));
if(!c.getNewFlag())
{
c.getStr1().setLength(0);
c.getStr1().append(Math.E);
}
else
{
c.getStr2().setLength(0);
c.getStr2().append(Math.E);
}
if(c.getMemoryPlusFlag())
c.setMemoryPlusFlag(false);
c.setPointFlag(true);
}
else if(source == c.b[41])//等于
{
doubleCalculate();
c.setRefreshFlag(true);
}
else if(source == c.b[42])//about
{
JOptionPane.showMessageDialog
(null, " 欢迎使用 \n" +
" 多功能计算器 v1.0 Beta\n" +
"有问题或需要更多帮助请查看 readme.txt");
}
else if(source == c.b[43])//退格
{
if(!c.getNewFlag())
{
if(c.getStr1().length() < 1)
return ;
c.getStr1().setLength(c.getStr1().length() - 1);
c.getDisplay().setText(c.getStr1().toString());
}
else
{
if(c.getStr2().length() < 1)
return ;
c.getStr2().setLength(c.getStr2().length() - 1);
c.getDisplay().setText(c.getStr2().toString());
}
}
else if(source == c.b[44])//CE
{
if(!c.getNewFlag())
{
c.getStr1().setLength(0);
c.setDivZeroFlag(false);
c.setDoubleOperatorFlag(-1);
c.setSingleOperatorFlag(-1);
}
else
{
c.getStr2().setLength(0);
}
c.getDisplay().setText("0");
c.setPointFlag(true);
c.setChangeFlag(false);
}
else if(source == c.b[45])//C
{
c.getDisplay().setText("0");
c.setNewFlag(false);
c.setPointFlag(true);
c.setChangeFlag(false);
c.setDivZeroFlag(false);
c.setDoubleOperatorFlag(-1);
c.setSingleOperatorFlag(-1);
c.getStr1().setLength(0);
c.getStr2().setLength(0);
}
else if(source == c.b[36])//M+ - 储存器的值 = 显示屏的值+储存器的值
{
if(c.getMemoryPlusFlag())
return ;
c.getMemory().setText(" M");
c.setMemoryValue(c.getMemoryValue() + Double.parseDouble(c.getDisplay().getText()));
c.setMemoryFlag(true);
c.setMemoryPlusFlag(true);
}
else if(source == c.b[30])//MS - 储存显示屏的值,并覆盖储存器原值
{
c.getMemory().setText(" M");
c.setMemoryValue(Double.parseDouble(c.getDisplay().getText()));
c.setMemoryFlag(true);
}
else if(source == c.b[24])//MR - 显示储存器的值
{
if(!c.getMemoryFlag())
return ;
c.getDisplay().setText(Double.toString(c.getMemoryValue()));
c.setMemoryDisplayFlag(true);
}
else if(source == c.b[18])//MC - 重置储存器的值
{
c.getMemory().setText("");
c.setMemoryValue(0);
c.setMemoryFlag(false);
c.setMemoryDisplayFlag(false);
}
}//46个键监听完成
private void addNumberOrPoint()
{
if(c.getMemoryPlusFlag())
{
c.getDisplay().setText("");
c.getStr1().setLength(0);
c.setMemoryPlusFlag(false);
}
if(c.getRefreshFlag())//当运算结束时,再按下数字键要清空
{
if(!c.getNewFlag())
{
c.getStr1().setLength(0);
c.getDisplay().setText("");
if(source == c.b[39])//刷新后,第一个按下的是".",则先增加"0"
c.getStr1().append(0);
}
else
{
c.getStr2().setLength(0);
c.getDisplay().setText("");
}
c.setRefreshFlag(false);
}
if(source == c.b[19])
numberChar = '7';
else if(source == c.b[20])
numberChar = '8';
else if(source == c.b[21])
numberChar = '9';
else if(source == c.b[25])
numberChar = '4';
else if(source == c.b[26])
numberChar = '5';
else if(source == c.b[27])
numberChar = '6';
else if(source == c.b[31])
numberChar = '1';
else if(source == c.b[32])
numberChar = '2';
else if(source == c.b[33])
numberChar = '3';
else if(source == c.b[39])
numberChar = '.';
if(!c.getNewFlag())
{
if(c.getStr1().length() > 40 || c.getStr1().indexOf(".") != -1 && source == c.b[39])//长度小于40
return ;
c.getDisplay().setText(c.getStr1().toString() + numberChar);
c.setStr1(c.getStr1().append(numberChar));
}
else
{
if(c.getStr2().length() > 40 || c.getStr2().indexOf(".") != -1 && source == c.b[39])
return ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -