?? 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 + -